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. Eventuellt kan D1 komma att hållas nivåuppdelad, men en grupp för de som aldrig tidigare jobbat med SAS eller känner sig osäkra och en grupp för de som kan arbeta mer självständigt. Eftersom D1 inte behandlar kursens inlämingsuppgifter så går det bra att arbeta med andra än de man ska göra inlämningsuppgiften ihop med, eller ensam (i mån av plats). 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 manuelt i ett DATA steg. Det kan till exempel gå till på följande sätt: 1
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; 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 Prodocts ->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. 2
Berarbeta Data För att skapa nya variabler i ett dataset används ett data steg. 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älpa 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 */ ; IF-satser kan också användas för att ta bort observationer med partiellt bortfall. Då använder man att SAS betecknar ett saknat värde med. (en punkt), och ne, som står för "not equal to" i villkoret. 3
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 om t ex html. Detta görs med hjälp 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"; 4
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). 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 5
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; 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 6
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\alcohol.xlsx finns data från en enkätundersökning om tonåringars alkoholvanor. (a) Läs in datasetet i SAS med hjälp av PROC IMPORT. (b) Skapa ett nytt dataset, alcohol2 där du tar bort raderna med partiellt bortfall med hjälp av ett DATA-steg. (c) Skapa den nya variabeln "gender" som antar värdet 1 för pojkar och 0 för flickor. (d) Skapa variabeln procent, som andelen pojkar respektivt flickor på varje skola som dricker alkohol. (e) På vilken skola och vilken grupp (pojkar/flickor) är det störst andel som dricker alkohol? Använd någon PROC som du känner till för att besvara frågan. 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