Datorövning 1 Statistisk teori med tillämpningar Repetition av SAS Syfte Syftet med Datoröving 1 (D1) är att repetera de SAS-kunskaperna från tidigare kurser samt att ge en kort introduktion till de studenter som inte tidigare arbetat med SAS. Målet för D1 är att studenterna ska kunna följande: Läsa in och bearbeta data i SAS Använda några av de vanligaste PROC:arna Sammanställa och presentera data i tabeller och grafiskt Exempel Olika sätt att lägga in data Det finns många olika sätt att läsa in data i SAS. Det enklaste sättet är att skriva in data manuellt i ett DATA steg. Det kan till exempel gå till på följande sätt: data sales; /*Skapar datasetet sales*/ input year quarter sales; /*variabelnamn*/ datalines; 2010 1 382 2010 2 387 ; proc print data=sales noobs; *skriv ut datasetet på skärmen. Tillägget noobs gör att SAS inte numerear observationerna; 1
Om den data man vill använda sig av finns i en fil (t ex en.txt eller.xls-fil) kan man använda sig av PROC IMPORT. datafile= anger vilken datafil som ska läsas in, genom att ange exakt sökväg till filen. Prova att läsa in filen M:\fk\teori\d1\sales.xlsx enligt exempel nedan. proc import datafile=" " out=sales2 replace; /*efter datafile= skriver man den exakta sökvägen till filen, inom fnuttar. sales är namnet på det nya datasetet. replace gör så att sas skriver över ett eventuellt tidigare dataset med samma namn*/ I det här fallet blev filen (förhoppningsvis!) rätt inläst från början. Använd PROC PRINT för att skriva ut datasetet till output. Om resultatet ser konstigt ut kan man titta i hjälpen för PROC IMPORT ( förslagsvis går man in på Innehåll -> SAS Products ->SAS Procedures och väljer sedan den PROC man är intresserad av i bokstavsordningen). Man slår enkelt ihop dataseten med hjälp av ett data-steg. data sales3; set sales sales2; Använd PROC PRINT för att titta på resultatet. Berarbeta Data För att skapa nya variabler i ett dataset används ett data steg. 2
data new; data new; */ input x y; datalines; 1 2 2 3 3 4 4 5 7 8 set new; z=x+y; /*genom att ge det dataset vi skapar samma namn som ett gammalt skriver vi over det gamla*/ /* skapar den nya variabeln z, som summan av x och y Alla nya variabler som är en funktion av existerande variabler (exempelvis summor, produkter, logartimer osv) kan skapas på detta sätt. Om man istället vill skapa en indikatorvariabel, exempelvis en variabel som antar värdet 1 om x är strikt större än två, och 0 annars, kan man göra det med hjälp av IF-satser: data new2; proc print; set new; if x > 2 then do; w=1; end; else do; w=0; /* om vilkoret ovan inte är uppfyllt så är w=0 */ end /*varje do sats måste avslutas med end */ ;. Deskriptiv statistik Om man vill använda sina resultat från SAS i rapporter eller liknande är det ofta praktiskt att se till att de sparas som t ex html. Detta görs med hjälp 3
av följande kodbit som körs innan man skriver något till outputen (behöver bara göras en gång). ods html body='ht11_d1_results.html' style=sasweb; as a html file */ /* Save results Det som man sedan skriver till output kommer att sparas i en htmlfil i samma mapp som SAS senast sparade något i. Använd data-setet sashelp.class för att se hur det fungerar. proc print data=sashelp.class; title 'Student Data'; Det finns flera PROC:ar som kan användas för att ta fram deskriptiv statistik exempelvis PROC UNIVARIATE och PROC SUMMARY. Oftast kan man använda vilken som helst av dessa, men om man t ex vill använda output från någon av dem i någon annan PROC kan det skilja sig åt. Nedan finns ett exempel på hur PROC MEANS används för att ta fram några deskriptiva mått från datasetet sashelp.class. proc means data=sashelp.class n mean var stddev median Q1 Q3 min max; var weight height; title "Descriptive statistics for weight & height of students"; Efter man talat om vilket dataset SAS ska använda specifiseras vilka statistikor som ska tas fram, i det här fallet stickprovsstorlek (n), medelvärde (mean), varians (var) osv. var talar om vilka variabler i datasetet vi är intresserade av (vikt, längd). Titelraden anger rubriken för den tabell som hamnar i html-filen (se ovan). 4
Kortfattat om grafer Grafer är ofta ett bra sätt att ge en överskådlig bild av ett datamaterial. Precis som i fallet med deskriptiv statistik vill man att de grafer man producerar ska se bra ut i en rapport. Därför kan man köra denna bit kod innan man sätter igång: ods graphics on/ /* ODS GRAPHICS can help make graph in SAS with higher resolution*/ reset=all /* Reset all the current ODS GRAPHICS options to defaults */ imagefmt=jpeg /* Specify the image format used to generate image files. SAS default format is.png */ width=800px /* Specify the width of any graph */ height=600px; /* Specify the height of any graph */ För att rita lådagram (boxplots) kan man använda PROC SGPLOT (om SAS 9.2 används). Nedan ses ett exempel på detta: proc sgplot data=sashelp.class; title "Box Plot for weight of students"; vbox weight/ boxwidth=0.5; /* specificerar hur brett lådagrammet ska vara, ett tal mellan 0 och 1 */ För att jämföra median och spridningen i olika grupper kan man rita komparativa lådagram. Det görs genom att lägga till en rad som talar om vilken variabel som anger grupptillhörighet. För att jämföra vikten mellan män och kvinnor (alltså uppdelat efter variabeln "sex"), gör man på följande sätt: proc sgplot data=sashelp.class; title "Box Plot for weight of students by sex"; vbox weight/ category=sex boxwidth=0.5; 5
För att rita histogram över en variabel kan man använda PROC UNI- VARIATE. Följande kod ritar ett histogram över variabeln weight i datadetet sashelp.class proc univariate data=sashelp.class noprint; /*noprint förhindrar att sas skriver något i outputen*/ title "Histogram for Weight of Students"; histogram weight; Om man vill jämföra fördelningen mellan olika grupper, t ex mellan män och kvinnor, används, precis som i PROC SGPLOT, "class" för att tala om vilken variabel som uppdelningen sker efter: proc univariate data=sashelp.class noprint; title "Histogram for Weight of Students"; histogram weight; class sex; Ibland vill man jämföra fördelningen för den data man har med en viss sannolikhetsfördelning, exempelvis normalfördelning. För att undersöka detta grafiskt kan man då rita in en normalfördelningskruva "ovanpå" sitt histogram. Det finns flera sätt att göra detta på, men det enklaste är att göra ett tillägg i PROC UNIVARIATE proc univariate data=sashelp.class noprint; title "Histogram for Weight of Students with Density Curve"; histogram weight/ normal; Övningar 1. I filen M:\fk\teori\d1_ex1.xlsx finns data från en enkätundersökning om tonåringars alkoholvanor. 6
(a) Läs in datasetet i SAS med hjälp av PROC IMPORT. (b) Skapa en ny variabel, percent, som innehåller andelen flickor respektive pojkar som dricker alkohol (c) På vilken skola och vilken grupp (pojkar/flickor) är det störst andel som dricker alkohol? Använd exempelvis PROC SORT för att besvara frågan. (Att leta igenom hela datamaterialet är inte en godkänd lösning) (d) I hur stor andel av grupperna är det färre än 25% som dricker alkohol? Lös uppgiften genom att skapa en indikatorvariabel för de grupper där högst 25% dricker alkohol och ta reda på medelvärdet (=andelen) för denna variabel. 2. I filen M:\fk\teori\d1\weight_girls.xlsx finns data om vikten för flickor i tre skolklasser. Läs in datasetet i SAS. (a) Jämför medelvärde och standardavvikelse i de tre klasserna (b) Rita histogram över vikten i var och en av de tre klasserna. Rita histogramen så att det är lätt att jämföra fördelningen av vikten i de olika klasserna (c) Rita tre lådagram (boxplots) över de vikten i de tre klasserna. Placera lådagramen sida vid sida. (d) Kan man anta att variabeln vikt (i alla tre klasserna) är en normalfördelad variabel? Undersök detta grafiskt genom att jämföra histogramet med motsvarande normalfördelningskurva. 7