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 Vigtigt: kig altid log filen igennem efter, at du har kørt et program. 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) 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. Vær opmærksom på at røde fejl i et datastep betyder, at der ikke bliver lavet noget nyt datasæt. Funktionstaster Menulinie Kommando Værktøjslinie F8 Run, Submit Submit Mand løber 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 Nu er datasættet indlæst og der er genereret et lille program, der kan gøre det igen. 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!! SAS Programmering SAS programmering foregår i 2 forskellige trin: DATA trin og procedure (PROC) trin. DATA trin: 1. indlæser data fra fil Procedure trin: 1. Bruger SAS data sæt 2. Producerer den information vi vil have, f.eks. tabeller, statistik, grafer m.v. 2. laver transformationer og tilføjer nye variable 3. laver nyt SAS data sæt, med de nye rettelser. Data trin DATA (work.)test; /*Det nye data sæt hedder test*/ SET test1; /*Indlæser data sættet test1*/ RUN; /*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. Oprettelse af et permanent datasæt. 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.*/ RUN; /*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. 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.*/ RUN; /*Slutter data trinnet.*/ PAS PÅ MED AT OVERSKRIVE JERES DATASÆT!! Variable Indtastning af 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 ; RUN; /*liste over variable, $ efter tekst 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 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! 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. Udvælgelse af observationer DATA test; SET test1; IF var1>8; /*Vælger alle dem med var1 større end 8*/ RUN; 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*/ RUN; 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*/ RUN; = ˆ= < > <= >= & | ˆ EQ forskellig fra LT GT LE GE IN AND OR NOT Forklaring lig med NE mindre end større end mindre end eller lig større end eller lig tilhører og eller negation Eksempel karakter = 8 karakter NE 8 karakter < 8 karakter > 8 karakter LE 8 karakter GE 8 karakter IN (6, 7, 8) karakter=8 AND fag=’mat’ karakter=8 OR fag=’mat’ 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 evar 1 */ RUN; Oprettelse af nye variable ved gruppering Regneudtryk og funktioner Regneudtryk og funktioner ** * / + EXP(argument) LOG(argument) LOG10(argument) SQRT(argument) ABS(argument) INT(argument) ROUND(argument, afrundingsenhed) Potensopløftning Multiplikation Division Addition Subtraktion Eksponentialfunktionen Naturlig logaritme 10-tals logaritme Kvadratroden Numerisk værdi Den hele del af Afrundet værdi Manglende værdier DATA test; SET test1; IF sp5vgt >= 160 THEN tung = ’ja’; IF sp5vgt < 160 THEN tung= ’nej’; RUN; Manglende værdier af en tekst variabel er angivet ved et blankt felt, mens manglende for en nummerisk er angivet ved et . elle .x 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 . 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) RUN; 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. Resulaterne af en procedure kommer i output vinduet, medmindre man har bedt SAS om noget andet. 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; RUN; PROC SORT Denne procedure kan sortere datasættet efter en eller flere variable. PROC SORT DATA= datanavn; BY variabel; RUN; 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 PROC PRINT udskriver datasættet, eller måske kun dele af det. PROC PRINT DATA= test; RUN; Udskriver samtlige observationer og samtlige variable til skærmen. PROC PRINT DATA= test; VAR var1 var2; RUN; Udskriver variablene var1 og var2 for samtlige observationer. Eksempel: PROC PRINT PROC PRINT DATA= test; WHERE var1 = 8; VAR var1 var2; RUN; 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; RUN; /*printer det systoliske og det diastoliske blodtryk til output vinduet*/ PROC PRINT DATA= test; VAR dias syst; RUN; PROC MEANS The SAS System 14:31 Saturday, March 17, 2007 1 Proc means bruges når man skal have beregnet summer, gennemsnit, standardafvigelser osv. The MEANS Procedure PROC MEANS DATA= test; VAR hoejde; RUN; N Mean Std Dev Minimum Maximum __________________________________________________________________ 18 174.8888889 6.2955529 163.0000000 189.0000000 __________________________________________________________________ Analysis Variable : hoejd Højde 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; RUN; Her angiver SAS, hvor mange, der har var1 oplyst, middelværdien 25, 50 og 75 percentilerne af var1 samt summen af variablen var1. N NMISS MEAN STD MIN MAX RANGE SUM VAR CSS CV STDERR Antal observationer med ikke manglende værdier Antal observationer med manglende værdier 1 ∑N x =√ i=1 xi Gennemsnit N 1 ∑N 2 s = N−1 i=1 (xi − x) Spredning x(1) Minimum x(N) Maximum x(1) − x(N) Variationsbredde ∑N af observationen i=1 xi Summen ∑ N 1 s2 = N−1 i=1 (xi − x)2 Empirisk varians ∑N 2 i=1 (xi − x) Kvadratafvigelsessummen 100 xs Variations koefficienten √s Empirisk spredning for gennemsnit N Eksempel 2: PROC MEANS The SAS System Man kan også beregne forskellige værdier for undergrupper af data: PROC SORT DATA= test1; BY ryger; RUN; PROC MEANS DATA= test1 N MEAN p50; VAR gendia gensys; BY ryger; RUN; 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 77.5641026 13 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; RUN; SAS indlæser test, og tabellerer variablen 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 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; RUN; Hvis man vil have lavet flervejs tabeller (krydstabeller), sætter man en stjerne imellem de variable der skal tabelleres mod hinanden. sp14t(Oplevede De, at der var 1-2 sygeplejerser i afdelingen, der havde særligt ansvar for deres ple sp13(I hvilken grad har De haft tillid til, at De har fået den rette sygeplejefaglige beha 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; RUN; Eksempel: PROC FREQ 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?) 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; RUN; Frequency|I høj gr|I nogen |I mindre|Har ikke| |ad |grad | grad | fået sy| | | | |geplejef| | | | |aglig be| | | | |handling| ______________________________________________ Ja | 2 | 3 | 0 | 1 | ______________________________________________ Nej | 1 | 7 | 3 | 0 | ______________________________________________ Ved ikke | 0 | 1 | 0 | 0 | ______________________________________________ Total 3 11 3 1 Total 6 11 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; RUN; 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 RUN; 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; RUN; 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; RUN; QUIT; Værdier for n: Tallene for 1 til 255 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 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 Eksempel 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 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; RUN; 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; RUN; 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; RUN; 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 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; RUN; QUIT; ODS RTF CLOSE; Boxplot PROC BOXPLOT DATA=a; PLOT alder*sex/ BOXSTYLE=SCHEMATIC; RUN; Histogram med normalfordeling PROC UNIVARIATE DATA=a; VAR alder; HISTOGRAM alder/NORMAL; RUN; Hvis hver datalinie tæller for flere personer PROC UNIVARIATE DATA=a; VAR alder; FREQ antal; HISTOGRAM alder/NORMAL; RUN; 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; RUN; Her tæller hver datalinie for "antal" observertioner/personer
© Copyright 2024