SAS systemet SAS 2012 Janne Petersen February 7, 2012 Styrken i SAS er dets evne til at håndtere store datasæt. Det er hurtigt og har mange statistiske og ikke-statistiske muligheder. Kan "alt", så det er ikke nødvendigt at skifte program undervejs. Alle phd-studerende kan få SAS gratis. En af ulemperne ved SAS er, at det tager noget tid at sætte sig ind i det. Der eksisterer dog forskellige brugervenlige inter-faces, f.eks. Interpriseguide. Alternative store programmer: SPSS, R og Stata. SAS vinduer Enhanced Editor: Program editor, hvor ens program kode skrives. Dvs. det er her man fortæller SAS hvad det er den skal gøre. Program Editor: Programeditor, gammel, ingen farver. Lad være med at bruge den. Log: Her skrives løbende hvad SAS laver, noter om fejl m.m. Output: Output fra ens kørsler, fortløbende. Dvs. resultaterne af ens kode. Results: Overblik over output Explorer: Libraries (SAS-software-biblioteker) og File Shortcuts. Kommando linien: Kan give korte kommandoer til SAS, f.eks. help freq (virker hjemme men ikke her). Menu linien: (Den øverste linie) Indeholder forskellige peg og klik muligheder (som alle andre Windows programmer) Værktøjs linien: Forskellige nyttige ikoner.
Filer Fejl i loggen Disse er de vigtigste af de filer SAS laver når man kører SAS. - *.SAS filer (SAS program) - *.LOG filer (Log) - *.LST filer (Output) - *.sas7bdat filer (Datasæt) Vigtigt: kig altid log filen igennem efter, at du har kørt et program. Note (blå): information, der ikke indikerer en fejl, men en oplysning, som man bør læse, fordi den kan være informativ og god til af finde metodefejl. Eksemper: Antal observationer i et data sæt kan være lavere end forventet. Warning (grøn): viser fejl som SAS selv har kunnet rette. Programmet er gennemført med disse fejl, men tjek om dette er gjort ordentligt. Eksempel: stavefejl. Kør programmet Error (rød): Alvorlige fejl, som SAS ikke kunne rette, programmet er stoppet, og man må selv finde fejlen og rette den. Eksempel: glemt semikolon. Funktionstaster Menulinie Kommando Værktøjslinie F8 Run, Submit Submit Mand løber Vær opmærksom på at røde fejl i et datastep betyder, at der ikke bliver lavet noget nyt datasæt. Hvis man kun ønske at køre en del af sit program, kan man markere delen og køre den.
Hjælpe funktioner Alle SAS datasæt er gemt i et SAS Library. Menulinien "Help" SAS manualen: http://support.sas.com/91doc/docmainpage.jsp Kommando feltet: skriv f.eks. help freq. Der findes to permanente Library i SAS ved standard opsætning. WORK og SASUSER I WORK gemmes alle de midlertidige SAS datasæt. Alt i WORK slettes ved lukning af SAS. I SASUSER gemmes alle datasæt permanent, dvs. de er der igen når SAS genstartes Importer data - I menulinien vælg filer - Vælg Importer data - Vælg "Delimited File (*.txt) - Klik Next - Browse frem til jeres datasæt - Klik ok - Vælg om I vil gemme i SASUSER eller WORK - Skriv et navn på jeres datasæt under "Member" - Klik next - Browse frem til der hvor I vil gemme indlæsningsprogrammet - Skriv et navn på den lille programstump, som I gerne vil gemme. - Tryk gem - Tryk Finish Opgave a Importer xxx..txt fra t-drevet til WORK biblioteket b Tjek at der ikke er nogen fejl i log filen c Prøv at åbne jeres datasæt igennem explorer vinduet, og luk det igen. (Hjælp: Klik på explorer, vælg libraries, vælg work, klik på datasættet) HUSK AT LUKKE DATASÆTTET IGEN!! Nu er datasættet indlæst og der er genereret et lille program, der kan gøre det igen.
SAS Programmering SAS programmering foregår i 2 forskellige trin: DATA trin og procedure (PROC) trin. DATA trin: 1. indlæser data fra fil 2. laver transformationer og tilføjer nye variable 3. laver nyt SAS data sæt, med de nye rettelser. Procedure trin: 1. Bruger SAS data sæt 2. Producerer den information vi vil have, f.eks. tabeller, statistik, grafer m.v. Data trin Oprettelse af et permanent datasæt. DATA (work.)test; /*Det nye data sæt hedder test*/ SET test1; /*Indlæser data sættet test1*/ /*Slutter data trinnet*/ Læser datasæt "test1" ind fra work og gemmer det over i det midlertidige datasæt "test" også i work. - Husk ; efter hver linie. - Det jeg skriver med store bogstaver er ord SAS kender. - Ikke nødvendigt at skrive WORK. - /* starter en kommentar, mens */ slutter en kommentar. libname us1 "P:\janne\SASkursus"; Tænk på us1 som en forkortelse for stien "P:\janne\SASkursus" DATA us1.test; /*Laver et permanent datasæt.*/ SET test1; /*Indlæser det midlertidige data sæt test1.*/ /*Slutter data trinnet.*/ Denne lille program stump gemmer altså vores midlertidige datasæt test1 i et permanent datasæt "test", der kan findes i folderen "P:\janne\SASkursus".
Indlæsning af et permanent datasæt. Indtastning af datasæt libname us1 "P:\ janne\ SASkursus"; Indlæsning af et permanent datasæt. DATA test; /*Laver et midlertidigt datasæt.*/ SET us1.test1; /*Indlæser det permanente data sæt test1.*/ /*Slutter data trinnet.*/ PAS PÅ MED AT OVERSKRIVE JERES DATASÆT!! DATA test1; INPUT id alder sex$; variable*/ DATALINES; 1 45 m 2 35 m 3 40 m 4 43 k 5 56 k 6 45 k ; /*liste over variable, $ efter tekst Variable Opgaver 2 Der er to typer af variable i SAS, numeriske og tekst variable. En typisk tekst variabel er bogstaver, men det kan også være tal. Eksempel: Måned med værdier jan, feb,..., Dec. En numerisk variabel er altid tal. Eksempel: alder med værdier 45, 13,..., 30. Man kan kun beregne f.eks. middelværdier på numeriske variable. Man benytter decimalpunktum a Indlæs SAS datasættet sundby.sas7bat fra Basalstatistik-folderen på T drevet. b V.h.a. Explorer vinduet undersøges hvilke variable, der er tekst variable og hvilke der er numeriske. I kan se hvilke variable der er tekst variable og hvilke variable der er nummeriske ved i explorer vinduet at højre klikke på jeres datasæt og vælge view columns. Men husk at lukke det igen!
Udvælgelse af observationer DATA test; SET test1; IF var1>8; /*Vælger alle dem med var1 større end 8*/ Indlæser igen test1 og laver et nyt data sæt test, kun med de observationer/personer, der har mere end 8 i var1. DATA test; SET test1; IF var1>8 THEN DELETE; /*sletter dem med var1 > 8*/ Her gør vi altså det modsatte, vi sletter dem, der har var1 større end 8 i test data sættet. Oversigt over forskellige operatorer Hvis det er en tekst variabel vi laver filter/betingelse på, så skal værdien i plinger; DATA test; SET test1; IF var2 = mat ; /*udvælger dem der har var2 = mat*/ Forklaring Eksempel = EQ lig med karakter = 8 ˆ = forskellig fra NE karakter NE 8 < LT mindre end karakter < 8 > GT større end karakter > 8 <= LE mindre end eller lig karakter LE 8 >= GE større end eller lig karakter GE 8 IN tilhører karakter IN (6, 7, 8) & AND og karakter=8 AND fag= mat OR eller karakter=8 OR fag= mat ˆ NOT negation NOT(karakter IN (6,7,8))
Oprettelse af variable ved beregning DATA test; SET us1.test1; k = 10 + var1; /*Ny variabel k, der er var1+10 */ m = 10 * var1; /*Ny variabel m, der er var1*10 */ expvar1=exp(var1); /*Ny variabel expvar1, der er e var1 */ Regneudtryk og funktioner Regneudtryk og funktioner ** Potensopløftning * Multiplikation / Division + Addition - Subtraktion EXP(argument) Eksponentialfunktionen LOG(argument) Naturlig logaritme LOG10(argument) 10-tals logaritme SQRT(argument) Kvadratroden ABS(argument) Numerisk værdi INT(argument) Den hele del af ROUND(argument, afrundingsenhed) Afrundet værdi Oprettelse af nye variable ved gruppering Manglende værdier DATA test; SET test1; IF sp5vgt >= 160 THEN tung = ja ; IF sp5vgt < 160 THEN tung= nej ; Tung har værdien ja hvis personen har en vægt på 160 eller derover, og nej hvis vægt er under 160 eller manglende. Manglende værdier af en tekst variabel er angivet ved et blankt felt, mens manglende for en nummerisk er angivet ved et. elle.x Manglende. tæller som så pas på med f.eks. IF alder<40... da dem der har manglede alder opfylder det. Skriv istedet IF.<alder<40 THEN... Manglende værdi regner SAS som en værdi på minus uendelig.
SAS programstruktur Procedure trin DATA trin: 1. indlæser data fra fil 2. laver transformationer og tilføjer nye variable 3. laver nyt SAS data sæt eller overskriver det gamle. Procedure trin: 1. Bruger SAS data sæt 2. Producerer den information vi vil have, f.eks. tabeller, statistik og grafer. SAS indeholder en lang række procedurer, der er inddelt i moduler efter deres anvendelse Ligesom et data trin altid starter med et DATA, starter procedure trinnet altid med et PROC. PROC CONTENTS PROC procnavn DATA= datanavn; (ordre vedr. udførelsen) Her gælder følgende: Datanavnet angiver hvilket datasæt proceduren skal arbejde på. Undlades DATA=datanavn benytter proceduren det sidst oprettede SAS-datasæt. Der findes rigtig mange forskellig ordrer til hver procedure. Skal man have oplysninger om antallet af observationer og navnene på de variable, der er i datasættet, kan man bruge PROC CONTENTS. PROC CONTENTS DATA= test; Resulaterne af en procedure kommer i output vinduet, medmindre man har bedt SAS om noget andet.
PROC SORT PROC PRINT Denne procedure kan sortere datasættet efter en eller flere variable. PROC SORT DATA= datanavn; BY variabel; Datasættet datanavn bliver her sorteret efter voksende værdier af variabel, dvs. fra mindst til størst. Visse procedurer og data trin kræver en sortering af data før de kan gennemføres. PROC PRINT udskriver datasættet, eller måske kun dele af det. PROC PRINT DATA= test; Udskriver samtlige observationer og samtlige variable til skærmen. PROC PRINT DATA= test; VAR var1 var2; Udskriver variablene var1 og var2 for samtlige observationer. Eksempel: PROC PRINT PROC PRINT DATA= test; WHERE var1 = 8; VAR var1 var2; Udskriver variablene var1 og var2 for dem, der har 8 i var1. Rækkefølgen på VAR og WHERE er underordnet. /*sorter datasættet efter det diastolisk blodtryk*/ PROC SORT DATA= test; BY dias; /*printer det systoliske og det diastoliske blodtryk til output vinduet*/ PROC PRINT DATA= test; VAR dias syst;
PROC MEANS Proc means bruges når man skal have beregnet summer, gennemsnit, standardafvigelser osv. PROC MEANS DATA= test; VAR hoejde; The SAS System 14:31 Saturday, March 17, 2007 1 The MEANS Procedure Analysis Variable : hoejd Højde N Mean Std Dev Minimum Maximum 18 174.8888889 6.2955529 163.0000000 189.0000000 PROC MEANS Man kan specificere præcis hvad det er, der skal udregnes på følgende måde: PROC MEANS DATA= test1 N MEAN p25 p50 p75 SUM; VAR var1; Her angiver SAS, hvor mange, der har var1 oplyst, middelværdien 25, 50 og 75 percentilerne af var1 samt summen af variablen var1. N Antal observationer med ikke manglende værdier NMISS Antal observationer med manglende værdier MEAN x = 1 N N i=1 x i Gennemsnit 1 STD s = N N 1 i=1 (x i x) 2 Spredning MIN x (1) Minimum MAX x (N) Maximum RANGE x (1) x (N) Variationsbredde SUM N i=1 x i Summen af observationen VAR s 2 = 1 N N 1 i=1 (x i x) 2 Empirisk varians CSS N i=1 (x i x) 2 Kvadratafvigelsessummen CV 100 s x Variations koefficienten s STDERR Empirisk spredning for gennemsnit N
Eksempel 2: PROC MEANS Man kan også beregne forskellige værdier for undergrupper af data: PROC SORT DATA= test1; BY ryger; PROC MEANS DATA= test1 N MEAN p50; VAR gendia gensys; BY ryger; The SAS System 14:31 Saturday, March 17, 2007 33 Ryger De?=Ja, dagligt The MEANS Procedure Variable N Mean 50th Pctl gensys 3 125.6666667 126.6666667 gendia 3 83.1111111 80.0000000 Ryger De?=Ja men der er dage hvor jeg ikke ryger Variable N Mean 50th Pctl gensys 2 127.6666667 127.6666667 gendia 2 79.6666667 79.6666667 Ryger De?=Nej Variable N Mean 50th Pctl gensys 13 124.8461538 125.0000000 gendia 13 77.5641026 80.3333333 PROC FREQ PROC FREQ bruges til at lave tabeller med. Den kan lave eneller flersidede tabeller. Ensidet tabel. PROC FREQ DATA= test; TABLE sp13; The SAS System 09:42 Monday, March 19, 2007 1 The FREQ Procedure I hvilken grad har De haft tillid til, at De har faet den rette sygeplejefaglige behandling? Cumulative Cumulative sp13 Frequency Percent Frequency Percent I høj grad 3 16.67 3 16.67 I nogen grad 11 61.11 14 77.78 I mindre grad 3 16.67 17 94.44 Har ikke faet sygeplejefaglig 1 5.56 18 100.00 behandling SAS indlæser test, og tabellerer variablen sp13.
PROC FREQ Man kan også liste en hel række af variable man gerne vil have lavet tabeller over. PROC FREQ DATA= test; TABLE var1 var2 var3; Hvis man vil have lavet flervejs tabeller (krydstabeller), sætter man en stjerne imellem de variable der skal tabelleres mod hinanden. Frequency Percent Row Pct I høj gr I nogen I mindre Har ikke Total ad grad grad fået beh Ja 2 3 0 1 6 11.11 16.67 0.00 5.56 33.33 33.33 50.00 0.00 16.67 Nej 1 7 3 0 11 5.56 38.89 16.67 0.00 61.11 9.09 63.64 27.27 0.00 Ved ikke 0 1 0 0 1 0.00 5.56 0.00 0.00 5.56 0.00 100.00 0.00 0.00 Total 3 11 3 1 18 16.67 61.11 16.67 5.56 100.00 PROC FREQ DATA= test; TABLE sp14t*sp13/nocol; Eksempel: PROC FREQ Der bliver her fast angivet i hver enkelt celle, antal observationer, celle procenter, række procenter samt søjle procenter. Men kan ved enkelte options fjerne nogle af alle disse værdier. PROC FREQ DATA= test; TABLE sp14t*sp13/norow NOCOL NOPERCENT; sp14t(oplevede De, at der var 1-2 sygeplejerser i afdelingen, der havde særligt ansvar for deres pleje?) sp13(i hvilken grad har De haft tillid til, at De har fået den rette sygeplejefaglige behandling?) Frequency I høj gr I nogen I mindre Har ikke Total ad grad grad fået sy geplejef aglig be handling Ja 2 3 0 1 6 Nej 1 7 3 0 11 Ved ikke 0 1 0 0 1 Total 3 11 3 1 18
Grafik PROC GCHART Proceduren GCHART kaldes på følgende møde. De to mest brugte procedurer til at lave grafik med i SAS er PROC GCHART og PROC GPLOT. Proceduren GCHART kan bruges til at lave histogrammer og lagkager og GPLOT bruges mest til at lave scatter plot, men kan utrolig meget, deriblandt også histogrammer. PROC GCHART DATA=algimin; VBAR sex/discrete; QUIT; Den variabel vi gerne vil have afsat på af Y-aksen skrives efter VBAR. Options DISCRETE fortæller SAS, at det er en diskret variabel vi vil lave et histogram af. Efter grafik skal der altid skrives QUIT, ellers bliver SAS ved med at køre. Hvis histogrammet i stedet skulle have været liggende, var statement HBAR brugt i stedet. Hvis vi skal sammenligne to forskellige grupper, f.eks. køn. PROC GCHART DATA=algimin; VBAR alder / TYPE=percent G100 GROUP=sex QUIT; Denne program stump giver os to histogrammer i et. Et for mændene og et for kvinderne. GROUP=sex gør, at der bliver tegnet seperate søjler for hvert køn. TYPE=percent, gør at vi får procenter i stedet for frekvenser. Option G100 bevirker, at summen af søjlerne vil være 100% for hver værdi af GROUP-variablen. Undlades G100 vil summen af alle søjlerne være 100%.
PROC GPLOT PROC GPLOT bruges f.eks. til at lave scatter plot med. Dvs. hvis man gerne vil plotte to variable mod hinanden. PROC GPLOT DATA=algimin; PLOT BMI*alder; QUIT; I PLOT-ordren fortælles hvilke variable, der skal tegnes op mod hinanden. Y-variablen skal stå først. Hvis man gerne vil have delt plottet op på f.eks. sex kan man lave forskelligt symbol alt efter om det er en mand eller kvinde man plotter. PROC GPLOT DATA=algimin; PLOT BMI*alder=sex; QUIT;
Man kan få mere avancerede plot ved brug af SYMBOL-ordrer, der fortæller hvad der skal ske med punkterne og evt. imellem punkterne (I= står for Interpolation=). Disse ordre indeholder blandt andet beskrivelser af farve C, plotsymboler V, signature L og interpolationsmåder I, som angiver om punkterne skal forbindes og i så fald hvordan. Værdier for n: Tallene for 1 til 255 Værdier for C: Almindelige farvenavne på engelsk. Hvilke der kan bruges afhænger af konfigurationen. Maskinen ændrer selv, hvis man bruger nogle ulovlige Værdier for V: PLUS, STAR, DIAMOND, DOT, NONE etc. Bruger man NONE bliver selve punkterne ikke tegnet. Brug symmetriske tegn Værdier for L: Tallene fra 1 til 46 Værdier for I NONE punkterne forbindes ikke, JOIN punkterne forbindes med rette linier, SPLINE tegner glat kurve gennem punkterne, NEEDLE tegner lodret linie ned til x-aksen RL tilpasser bedste rette linie RQ tilpasser bedste andengradspolynomium STEPL tegner trappe funktion, punkterne er til venstre for stregen STEPR tegner trappe funktion, punkterne er til højre for stregen STEPC tegner trappe funktion, punkterne er på midten af stregen Eksempel SYMBOL1 C=black V=plus L=1 I=RL; PROC GPLOT DATA=algimin; PLOT BMI*alder=1 / FRAME HAXIS=10 TO 70 BY 10 VAXIS=10 TO 60 BY 10; QUIT; Vi har her lavet et plot af BMI mod alder og sat et + for hver observation og samtidige tegnet den bedste rette linie igennem punkterne. I loggen kommer der til at stå en forskrift for regressions linien. Ordren = 1 i PLOT statement gør, at det er symbolerne fra SYMBOL1 der bliver brugt.
SYMBOL1 C=blue V=plus L=1 I=RL; SYMBOL2 C=red I=RQ; PROC GPLOT DATA=algimin; PLOT BMI*alder=1 BMI*alder=2 / FRAME OVERLAY; QUIT; OVERLAY gør at de to plots bliver tegnet oven i hinanden. Resultater i word ODS RTF FILE= "C:\Janne\projekter\proj1\descp anal.rtf"; SYMBOL2 C=red I=rq; PROC GPLOT DATA=algimin; PLOT BMI*alder=1 BMI*alder=2 /FRAME OVERLAY; QUIT; ODS RTF CLOSE; Alt hvad der står mellem ODS RTF FILE= og ODS RTF CLOSE; bliver kommer over i word dokumentet.
Resultater i word - lidt pænere Histogram med normalfordeling ODS RTF FILE= "C:\Janne\descp anal.rtf" BODYTITLE STARTPAGE=NO STYLE=journal; ODS NOPROCTITLE; SYMBOL2 C =red I=RQ; PROC GPLOT DATA=algimin; PLOT BMI*alder=1 BMI*alder=2 /FRAME OVERLAY; QUIT; ODS RTF CLOSE; PROC UNIVARIATE DATA=a; VAR alder; HISTOGRAM alder/normal; Boxplot Hvis hver datalinie tæller for flere personer PROC BOXPLOT DATA=a; PLOT alder*sex/ BOXSTYLE=SCHEMATIC; PROC UNIVARIATE DATA=a; VAR alder; FREQ antal; HISTOGRAM alder/normal; Her tæller hver datalinie for "antal" observertioner/personer
Hvis hver datalinie tæller for flere personer PROC FREQ DATA= test; TABLE var1 var2 var3; WEIGHT antal; Her tæller hver datalinie for "antal" observertioner/personer