Upload
others
View
5
Download
0
Embed Size (px)
Citation preview
Kort introduktion til SAS
Janne Petersen
Efterår 2013
SAS systemet
Styrken i SAS er dets evne til at håndtere store datasæt. Det erhurtigt og har mange statistiske og ikke-statistiske muligheder.
Kan "alt", så det er ikke nødvendigt at skifte program undervejs.Alle ph.d.-studerende kan få SAS gratis.
En af ulemperne ved SAS er, at det tager noget tid at sætte sigind i det. Der eksisterer dog forskellige brugervenligeinter-faces, f.eks. Enterprise Guide.
Alternative store programmer: SPSS, R og Stata.
SAS vinduer
Enhanced Editor: Program editor, hvor ens program kodeskrives. Dvs. det er her, man fortæller SAS, hvaddet er, den skal gøre.
Log: Her skrives løbende, hvad SAS laver, noter om fejlm.m.
Results Viewer: Output fra ens kørsler, fortløbende.Output: Output fra ens kørsler, fortløbende. Dvs.
resultaterne af ens kode.Results: Overblik over output
Explorer: Libraries (SAS-software-biblioteker) og FileShortcuts.
Kommando linien: Kan give korte kommandoer til SAS, f.eks.help freq.
Menu linien: (Den øverste linie) Indeholder forskellige peg ogklik muligheder (som alle andre Windowsprogrammer)
Værktøjs linien: Forskellige nyttige ikoner.
Filer
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)- *.HTML nye SAS output-filer- *.sas7bdat filer (Datasæt)
Fejl i loggen
Vigtigt: kig altid log filen igennem, efter du har kørt et program.
Note (blå): information, der ikke indikerer en fejl, menen oplysning, som man bør læse, fordi den kanvære informativ og god til af finde metodefejl.Eksemper: Antal observationer i et data sæt kanvære lavere end forventet.
Warning (grøn): viser fejl som SAS selv har kunnet rette.Programmet er gennemført med disse fejl, mentjek om dette er gjort ordentligt. Eksempel:stavefejl.
Error (rød): Alvorlige fejl, som SAS ikke kunne rette,programmet er stoppet, og man må selv findefejlen og rette den. Eksempel: glemt semikolon.
Vær opmærksom på at røde fejl i et datastep betyder, at derikke bliver lavet noget nyt datasæt.
Kør programmet
Funktionstaster F8Menulinie Run, SubmitKommando SubmitVærktøjslinie Mand, der løber
Hvis man kun ønsker at køre en del af sit program, kan manmarkere delen og køre den.
Hjælpe funktioner
♣ Menulinien "Help"♣ SAS manualen:
http://support.sas.com/onlinedoc/913/docMainpage.jsp♣ Kommando feltet: skriv f.eks. help freq.♣ Google is your friend.
Alle SAS datasæt er gemt i et SAS Library.
Der findes to standard Library i SAS ved standard opsætning:WORK og SASUSER
I WORK gemmes alle de midlertidige SAS datasæt. Alt iWORK slettes ved lukning af SAS.
I SASUSER gemmes alle datasæt permanent, dvs. de er derstadig, når SAS startes næste gang.
SAS Programmering
SAS programmering foregår i 2 forskellige trin: DATA trin ogprocedure (PROC) trin.
DATA trin:1. indlæser data fra fil2. laver transformationer og tilføjer nye variable3. laver nyt SAS data sæt, med de nye rettelser.
Procedure trin:1. Bruger SAS data sæt2. Producerer den information, vi vil have, f.eks. tabeller,
statistik, grafer m.v.
Data trin
DATA WORK.test; /*Det nye datasæt hedder test*/SET WORK.test1; /*Indlæser datasættet test1*/
RUN; /*Slutter data trinnet*/
Læser det midlertidige datasæt ’test1’ ind fra WORK oggemmer det 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 midlertidigedatasæt ’test1’ i et permanent datasæt ’test’, der lægges ifolderen P:\janne\SASkursus.
Indlæsning af et permanent SAS datasæt.
Indlæsning af et permanent SAS datasæt, test1.sas7bdat, frafolderen P:\janne\SASkursus.
LIBNAME us1 "P:\janne\SASkursus";
DATA test; /*Laver et midlertidigt datasæt ’test’ i WORK*/SET us1.test1; /*Indlæser det permanente
SAS datasæt ’test1(.sas7bdat)’ fra P:\janne\SASkursus*/RUN; /*Slutter data trinnet.*/
PAS PÅ MED AT OVERSKRIVE JERES DATASÆT!!
Indlæsning af .txt filer
DATA a;INFILE "C:\Basal\hjerte.txt" firstobs=2;INPUT hjerte total; /*Navnene på variablene i
datasættet—i rigtig række følge*/RUN;
Indlæser files hjerte.txt som ligger C:\Basal\ og ligger det overi SAS datasættet a.firstobs fortæller SAS at data først starter i linie 2.
Indtastning af datasæt
DATA test1;INPUT id alder sex$; /*liste over variable, der skal
læses ind, skriv ’$’ efter tekst variable*/DATALINES;1 45 m2 35 m3 40 m4 43 k5 56 k6 45 k;
RUN;
Variable
Der er to typer af variable i SAS, numeriske og tekst variable.
En typisk tekst variabel er bogstaver, men det kan også væretal.Eksempel: Month med værdierne ’Jan’, ’Feb’, . . ., ’Dec’.
En numerisk variabel er altid tal.Eksempel: alder med værdier 45,13, . . . ,30. Eksempelvismiddelværdier kan kun beregnes på numeriske variable. Manbenytter decimalpunktum, ikke komma.
I Explorer vinduet I kan se hvilke variable, der er tekst variable,og hvilke variable, der er nummeriske, ved at højreklikke påjeres datasæt og vælge View Columns. Husk at lukkedatasættet igen med det samme!
Udvælgelse af variable
DATA test; /*Det nye data sæt hedder test*/SET test1; /*Indlæser data sættet test1*/KEEP var1 var2 var3;
RUN; /*Slutter data trinnet.*/
Indlæser hele test1 datasættet, men gemmer kun variablenevar1, var2 og var3 i datasættet test.
"Observationer" er rækker i datasættet."Variable" er kolonner i datasættet.
Sletning af variable
DATA test; /*Det nye data sæt hedder test*/SET test1; /*Indlæser data sættet test1*/DROP var1 var2 var3;
RUN; /*Slutter data trinnet.*/
Indlæser igen hele test1 data sættet, og gemmer alle andrevariable i datasættet test end var1, var2 og var3.
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 deobservationer/personer, der har mere end 8 i ’var1’.
Sletning af observationer
DATA test;SET test1;IF var1>8 THEN DELETE; /*sletter dem med ’var1’ >
8*/RUN;
Her gør vi altså det modsatte, vi fjerner dem, der har ’var1’større end 8 fra ’test’ datasættet.
Hvis det er en tekst variabel, vi laver filter/betingelse på, så skalværdien i plinger (’) eller i gåseøjne (") (Pas på! Husk at brugesamme slags både før og efter tekststrengen):
DATA test;SET test1;IF fag = ’Mat’; /*Udvælger dem, hvor ’fag’ er lig Mat
RUN;
Bemærk, at store/små bogstaver IKKE er lige meget i "Mat",det skal se ud præcis som det er kodet i datasættet.
Oversigt over forskellige operatorer
Forklaring Eksempel= EQ lig med karakter = 8ˆ= NE forskellig fra karakter NE 8< LT mindre end karakter < 8> GT større end karakter > 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 afvariable 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 evar1*/
RUN;
Regneudtryk og funktioner
Regneudtryk og funktioner** Potensopløftning* Multiplikation/ Division+ Addition- SubtraktionEXP(argument) EksponentialfunktionenLOG(argument) Naturlig logaritmeLOG10(argument) 10-tals logaritmeLOG2(argument) 2-tals logaritmeSQRT(argument) KvadratrodenABS(argument) Numerisk værdiINT(argument) Den hele del afROUND(argument, afrundingsenhed) Afrundet værdi
Oprettelse af nye variable ved gruppering
DATA test;SET test1;IF sp5vgt >= 160 THEN tung = ’ja ’; /*Bemærk det
ekstra mellemrum efter ja*/IF sp5vgt < 160 THEN tung= ’nej’;
RUN;
Tung har værdien ’ja ’, hvis personen har en vægt på 160 ellerderover, og ’nej’, hvis vægt er under 160 eller manglende.
Manglende værdi regner SAS som en værdi på minus uendelig.
Manglende værdier
Manglende værdier af en tekst variabel er angivet ved et blanktfelt, mens manglende for en nummerisk er angivet ved et ., elleret .x
Nummerisk manglende . eller .x tæller som −∞, så pas påmed f.eks. IF alder
SAS programstruktur
DATA trin:1. indlæser data fra fil2. laver transformationer og tilføjer nye variable3. laver et nyt SAS datasæt (eller overskriver et gammmelt).
Procedure trin:1. Bruger SAS datasæt2. Producerer den information, vi vil have, f.eks. tabeller,
statistik og grafer.
Procedure trin
SAS indeholder en lang række procedurer, der er inddelt imoduler efter deres anvendelse
Ligesom et data trin altid starter med et DATA, starter etprocedure trin altid med et PROC.
PROC procnavn DATA=datanavn;(ordrer vedr. udførelsen)
RUN;
Her gælder følgende: ’datanavn’ angiver hvilket datasæt,proceduren skal arbejde på. Undlades ’DATA=datanavn’,benytter proceduren det senest oprettede SAS-datasæt.
Der findes rigtigt mange forskellige ordrer til hver procedure.
Resultaterne af en procedure kommer i Output-vinduet, medmindre man specifikt har bedt SAS om noget andet.
PROC CONTENTS
Skal man have oplysninger om antallet af observationer ognavnene på de variable, der er i datasættet, kan man brugePROC CONTENTS.
PROC CONTENTS DATA=test;RUN;
PROC SORT
Denne procedure kan sortere datasættet efter en eller flerevariable.
PROC SORT DATA= datanavn;BY variabel1;
RUN;
Datasættet ’datanavn’ bliver her sorteret efter voksendeværdier af ’variabel1’, dvs. fra mindst til størst.
Visse procedurer og data trin kræver en sortering af data, førde kan gennemføres.
PROC PRINT
PROC PRINT udskriver datasættet, eller eventuelt kun dele afdet.
PROC PRINT DATA= test;RUN;
Udskriver samtlige observationer og samtlige variable tilskærmen.
PROC PRINT DATA= test;VAR var1 var2;
RUN;
Udskriver variablene ’var1’ og ’var2’ for samtlige observationer.
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 ligegyldig.
Eksempel: PROC PRINT
/*sorter datasættet efter det diastoliske blodtryk*/PROC SORT DATA= test;
BY dias;RUN;/*printer det systoliske og det diastoliske blodtryk til outputvinduet*/PROC PRINT DATA= test;
VAR dias syst;RUN;
PROC MEANS
Proc Means bruges, når man skal have beregnet summer,gennemsnit, standardafvigelser osv.
PROC MEANS DATA=test;VAR hoejde;
RUN;
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;
RUN;
Her skal SAS beregne, hvor mange, der har ’var1’ oplyst,middelværdien, 25, 50 og 75 percentilerne af ’var1’ samtsummen af variablen ’var1’.
N Antal observationer med ikke manglende værdierNMISS Antal observationer med manglende værdierMEAN x = 1N
∑Ni=1 xi Gennemsnit
STD s =√
1N−1
∑Ni=1(xi − x)2 Spredning
MIN x(1) MinimumMAX x(N) MaximumRANGE x(N) − x(1) VariationsbreddeSUM
∑Ni=1 xi Summen af observationerne
VAR s2 = 1N−1∑N
i=1(xi − x)2 Empirisk variansCSS
∑Ni=1(xi − x)2 Kvadratafvigelsessummen
CV 100 sx % Variations koefficientenSTDERR s√
NEstimeret spredning på gennemsnittet
Eksempel 2: PROC MEANS
Man kan også beregne værdierne for forskellige undergrupperaf data:
PROC SORT DATA= test1;BY ryger;
RUN;
PROC MEANS DATA=test1 N MEAN P50;VAR gensys gendia;BY ryger;
RUN;
The SAS System 14:31 Saturday, March 17, 2007 33
Ryger De?=Ja, dagligtThe MEANS ProcedureVariable N Mean 50th Pctl______________________________________________gensys 3 125.6666667 126.6666667gendia 3 83.1111111 80.0000000______________________________________________
Ryger De?=Ja men der er dage hvor jeg ikke rygerVariable N Mean 50th Pctl______________________________________________gensys 2 127.6666667 127.6666667gendia 2 79.6666667 79.6666667______________________________________________
Ryger De?=NejVariable N Mean 50th Pctl______________________________________________gensys 13 124.8461538 125.0000000gendia 13 77.5641026 80.3333333______________________________________________
PROC FREQ
PROC FREQ bruges til at lave tabeller med. Den kan lave en-eller flersidede tabeller.
Ensidet tabel.
PROC FREQ DATA= test;TABLE sp13;
RUN;
SAS tabellerer variablen ’sp13’ på datasættet ’test’.
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 rettesygeplejefaglige behandling?
Cumulative Cumulativesp13 Frequency Percent Frequency Percent
_____________________________________________________________________________I høj grad 3 16.67 3 16.67I nogen grad 11 61.11 14 77.78I mindre grad 3 16.67 17 94.44Har ikke faet sygeplejefaglig 1 5.56 18 100.00behandling
PROC FREQ
Man kan også liste en hel række af variable, man gerne vilhave lavet tabeller over.
PROC FREQ DATA= test;TABLE var1 var2 var3;
RUN;
Hvis man vil have lavet flervejs tabeller (krydstabeller), sætterman en stjerne imellem de variable der skal tabelleres modhinanden.
PROC FREQ DATA= test;TABLE sp14t*sp13/NOCOL;
RUN;
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?)
FrequencyPercentRow Pct I høj gr I nogen I mindre Har ikke Total
ad grad grad fået behJa 2 3 0 1 6
11.11 16.67 0.00 5.56 33.3333.33 50.00 0.00 16.67
Nej 1 7 3 0 115.56 38.89 16.67 0.00 61.119.09 63.64 27.27 0.00
Ved ikke 0 1 0 0 10.00 5.56 0.00 0.00 5.560.00 100.00 0.00 0.00
Total 3 11 3 1 1816.67 61.11 16.67 5.56 100.00
Eksempel: PROC FREQ
Der bliver her som standard i hver enkelt celle angivet antalobservationer, celle procenter, række procenter samt søjleprocenter. Men kan ved hjælp af options fjerne nogle af alledisse værdier.
PROC FREQ DATA= test;TABLE sp14t*sp13/NOROW NOCOL NOPERCENT;
RUN;
sp14t(Oplevede De, at der var 1-2 sygeplejerser i afdelingen, derhavde særligt ansvar for deres pleje?)
sp13(I hvilken grad har De haft tillid til, at De harfå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
Den mest brugte procedurer til at lave grafik med i SAS erPROC GPLOT. GPLOT bruges til at lave f.eks. scatter plots,men kan lave utrolig meget andet, deriblandt også box plots.
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 modhinanden. Y-variablen skal stå først.
Hvis man gerne vil kunne se forskel på f.eks. sex, kan man laveforskellige symboler alt efter, om det er en mand eller kvinde,man plotter.
PROC GPLOT DATA=algimin;PLOT BMI*alder=sex;
RUN;QUIT;
Man kan få meget mere avancerede plot ved brug afSYMBOL-statements, der fortæller, hvad der skal ske medpunkterne og evt. i mellem punkterne. SYMBOL-statementsindeholder blandt andet beskrivelser af farve (C=. . . ),plotsymbol (V=. . . ), linietype (L=. . . ) og interpolationsmåde(I=. . . ), som angiver, om punkterne skal forbindes og i så faldhvordan.
Et SYMBOL-statement kan se således ud:
SYMBOLn C=BLUE V=PLUS L=1 I=RL;
Værdier for n: Tal fra 1 til 255Værdier for C: Almindelige farvenavne på engelsk. Hvilke der
kan bruges afhænger af konfigurationen.Maskinen ændrer selv, hvis man bruger nogleulovlige
Værdier for V: PLUS, STAR, DIAMOND, DOT, NONE etc.Bruger man NONE, bliver selve punkterne ikketegnet.
Værdier for L: Tallene fra 1 til 46
Værdier for I NONE: punkterne forbindes ikke,BOXnn: box-plot med whiskers fra nn til100 − nn percentilen (nn=00. . . 25); medianerneforbindes, hvis man skriver J; mens T betyder, atwhiskers slutter med en lille tværstregJOIN: punkterne forbindes med rette linier,SPLINE: tegner ’glat’ kurve gennem punkterne,NEEDLE: tegner lodret linie ned til x-aksenRL: tilpasser bedste rette linieRLCLI: bedste rette linie mednn-prædiktionsgrænser (nn=50. . . 99)RLCLM: bedste rette linie med konfidensgrænserRQ: tilpasser bedste andengradspolynomium
Værdier for I SMnnS: tilpasser ’blød’ kurve, jo større nn er(nn=0. . . 99), jo mere glat/lige blive kurvenSTDn: tegner gennemsnit med ±nstandarddeviationer (n=1, 2, 3), dvs. forn=2 er detca 95% prædiktionsgrænserSTDnM: tegner gennemsnit med ±n SEM (n=1, 2,3) (dvs. forn=2 er det ca 95% konfidensgrænser)STEPL: tegner trappefunktion, punkterne er tilvenstre på stregen; J forbinder de vandrette liniermed lodrette linier (så det ligner en trappe) –bruges til plots af overlevelseskurverSTEPR: tegner trappefunktion, punkterne er tilhøjre på stregenSTEPC: tegner trappefunktion, punkterne erpå 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;RUN;QUIT;
Vi har her lavet et plot af BMI mod alder og sat et + for hverobservation og samtidige tegnet den bedste rette linie igennempunkterne. Ordren “=1” i PLOT statement gør, at det ersymbolerne 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 RTFCLOSE; bliver kommer over i Word dokumentetC:\Janne\projekter\proj1\descp anal.rtf.
Resultater i Word - lidt pænere version
ODS RTF FILE= "C:\Janne\descp anal.rtf" BODYTITLESTARTPAGE=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;
Histogram med normalfordeling
PROC UNIVARIATE DATA=a;VAR supar;HISTOGRAM supar/NORMAL;PROBPLOT supar/NORMAL(MU=est SIGMA=est);
RUN;
Boxplot
Data skal være sorteret efter X-variablen i PROC BOXPLOTPROC SORT DATA=a OUT=SortedBySex;
BY blodtryk;RUN;PROC BOXPLOT DATA= SortedByBlodtryk;
PLOT supar*blodtryk/ BOXSTYLE=SCHEMATIC;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" 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’ observationer/personer