Procedurer

Nedenfor finder du en kort beskrivelse af nogle af de hyppigst anvendte procedurer. Siden vil blive opdateret løbende efterhånden som vi får brug for flere procedurer, men vil næppe blive udtømmende (muligvis får I brug for kommandoer / options / procedurer som ikke bliver beskrevet her). Flere detaljer om procedurerne og deres anvendelse kan findes på SAS' hjemmeside (klik på +'et ud for 'Procedures' for at få en komplet liste over alle procedurer; herfra kan klikkes ind på de enkelte procedurer). Lene har en lille SAS-manual som du med fordel kan bladre igennem og Janne Petersen (øvelseslærer) har også udarbejdet et sæt slides (link endnu ikke aktivt) som det er værd at kigge igennem.

For hver procedure gives et eksempel med en anvendelse på datasættet Sundby95 benyttet i videoerne med introduktion til SAS. Datasættet indlæser du med syntaksen (jvf video 1 på introduktionssiden)

data sundby;
     infile "http://staff.pubhealth.ku.dk/~lts/basal/data/sundby_lille.txt" url firstobs=2;
     input kon v75 v76 v17 v24af;

     * alkohol i grupper;
     if .z < v24af <= 3 then alkohol='0-3 genstande';
     if 3 < v24af <= 6 then alkohol='3-6 genstande';
     if v24af > 6 then alkohol='6+ genstande';
run;

hvor jeg i samme ombæring også har defineret den kvalitative version af alkoholvariablen (video 6). Du kan efter at have indlæst disse data køre alle eksemplerne nedenfor.

Det tager tid at lære hvilke procedurer man benytter til hvilke formål. På denne side gennemgås proc contents som giver et overblik hvad data indeholder, proc print som benyttes til at printe (dele af) et datasæt. proc sort benyttes til at sortere datasæt, etc etc eller hvordan give et kort overblik.... måske bullet-liste


proc contents

Giver antal observationer og en liste over variablene i et datasæt.

proc contents data=sundby;
run;


proc print

Printer (dele af) et datasæt. Med ekstra option (obs=15) printes kun de 15 første observationer. Med var fortæller vi hvilke variable vi ønsker at printe.

proc print data=sundby (obs=15);
var kon v76;
run;


proc sort

Sorterer observationerne i et datasæt efter værdierne af en eller flere variable angivet i by-linien. Nedenfor bliver data sorteret efter stigende værdi af kon og for hver værdi af kønsvariablen, bliver data sorteret efter stigende værdi af v76 (højde). Dvs først får vi alle mænd sorteret efter stigende højde, derefter alle kvinder efter stigende højde.

proc sort data=sundby;
by kon v76;
run;


proc sort gør ikke andet end at sortere dit datasæt, så hvis du vil se resultatet af din sortering skal du efterfølgende lave et print af dine data (ved brug af proc print).


Vi kan bede om at få observationerne sorteret i omvendt rækkefølge ved at tilføje et descending før den variabel, vi ønsker at sortere omvendt efter (her v76). Her får vi således først mænd sorteret efter aftagende højde (dvs de høje mænd står først i datasættet), derefter kvinder efter aftagende højde.

proc sort data=sundby;
by kon descending v76;
run;


proc univariate

Denne procedure kan benyttes på flere forskellige måder til at beskrive fordelingen af en kvantitativ variabel. Hvis vi i en var-linie angiver variablen får vi et hurtigt overblik med en lang række deskriptive størrelser (median, middelværdi, standard deviation, test for om middelværdi / median er 0, ...):

proc univariate data=sundby;
var v76;
run;

Et histogram kan vi få lavet vha. en histogram-linie. Hvis vi samtidigt tilføjer option noprint i proc univariate-linien undgår vi at få den lange liste med deskriptive størrelser som vi ellers får af proc univariate:

proc univariate data=sundby noprint;
histogram v76;
run;

Tilsvarende kan et QQ-plot laves med en qqplot-linie (de ekstra options efter /'en sikrer at plottet tilføjes en referencelinie svarende til normalfordelingen med den estimerede middelværdi og standarddeviation):

proc univariate data=sundby noprint;
qqplot v76 / normal (mu=est sigma=est);
run;


proc means

Benyttes til at beregne summer, gennemsnit, standardafvigelser, medianer mm. Med en var-linie fortæller vi, hvilke variable vi ønsker at beregne disse størrelser for. Dette giver kun mening for kvantitative (numeriske) variable.

proc means data=sundby;
var v75 v76;
run;

Tilføjes en class-linie, hvor man specificerer en kvalitativ variabel, udføres beregningerne for hvert niveau af den kvalitative variabel. Hvis vi f.eks. ønsker beregningerne udført for hvert køn skriver vi:

proc means data=sundby;
var v75 v76;
class kon;
run;

Ekstra options kan tilføjes i proc means-linien til at kontrollere præcis hvilke størrelser der skal bestemmes, for eksempel:

proc means data=sundby n q1 q3 range mean maxdec=2;
var v75 v76;
run;

Hvordan disse options skal forstås og øvrige nyttige muligheder fremgår af nedenstående tabel.

maxdec=x

Specificerer at vi ønsker resultaterne angivet med x decimaler.

n

Antal observationer med oplyste værdier

nmiss

Antal observationer med manglende værdier

median

Median

min

Mindste værdi (minimum)

max

Største værdi (maximum)

range

Variationsbredde (maximum - minimum)

q1 / q3

Hhv. 1. og 3. kvartil (25% og 75%-fraktil)

p1 / p5 / p95 / p99

Hhv. 1%, 5%, 95% og 99%-fraktiler

sum

Sum

mean

Gennemsnit

std

Spredning = standardafvigelse = standard deviation

var

Varians

stderr

Standard error (standard afvigelse på gennemsnittet)

clm

Konfidensinterval for middelværdien

t

T-test størrelsen for test af hypotesen om at middelværdien er 0

probt

P-værdien hørende til t-test størrelsen for test af hypotesen om at middelværdien er 0


proc freq

Benyttes til at lave tabeller og diverse tests i en-, to- flervejstabeller. I video 5 gennemgik jeg hvordan man benytter proc freq til at lave en simpel optælling / envejstabel med syntaksen:

proc freq data=sundby;
tables kon;
run;

Har man en variabel med to kategorier (feks ja/nej eller 0/1) kan man undersøge hypotesen om at sandsynligheden for succes (succes defineret som første niveau af variablen, dvs her ja eller 0) er lig en bestemt værdi. Ønsker man feks at teste om sandsynligheden for at være mand er 0.5 (fjollet formuleret) svarende til at andelen af mænd og kvinder er lige stor, kan man teste dette ved at tilføje binomial (p=0.5) efter en / i tables-linien. Dette test er baseret på normalfordelingsapproximationen til binomialfordelingen, som fungerer godt når p ikke er for tæt på 0 eller 1 og n ikke er for lille. Vil man også have et eksakt test (som dur for alle værdier af p) kan man tilføje en ekstra linie exact binomial;:

proc freq data=sundby;
tables kon / binomial (p=0.5);
exact binomial;
run;


En tabel hvor man holder to variable op mod hinanden (tovejstabel) kan opnås ved at sætte en * mellem de to variable i tables-linien. Variablen før *'en kommer i rækkerne, variablen efter i søjlerne.

proc freq data=sundby;
tables kon * alkohol;
run;

Her kan man med en række ekstra options styre, hvilke procenter SAS skal beregne og få lavet et test for om de to variable er uafhængige ved at tilføje options efter en / i tables-linien, f.eks:

proc freq data=sundby;
tables kon * alkohol / nopercent nocol chisq;
run;

Ovenfor specificeres at vi ikke ønsker totalprocenter og søjleprocenter (vi får så kun rækkeprocenter) og at vi ønsker et chi-i-anden test for uafhængighed. Hyppigt anvendte options er:

nopercent

Udelader overall procenter

nocol

Udelader søjleprocenter

norow

Udelader rækkeprocenter

expected

Tilføjer den forventede værdi under hypotesen om uafhængighed mellem række- og søjlevariablene

chisq

Udfører chi-i-anden test i tovejs-tabeller. Bruger du Studio får du kun en p-værdi ud, bruger du Enterprise kommer der adskillige, hvor den første svarer til det hyppigt anvendte Pearson chi-i-anden test.

relrisk

Beregner relativ risiko og oddsratio for en 2x2-tabel incl konfidensintervaller.

riskdiff

Bestemmer risikodifferensen incl CI for en 2x2 tabel


proc npar1way

Benyttes til at lave ikke-parametriske sammenligninger. Den variabel vi ønsker at undersøge (responsvariablen, kvantitativ) angives i en var-linie mens inddelingskriteriet (den forklarende variabel) angives i en class-linie.

proc npar1way data=sundby;
var v76;
class kon;
run;

Tilføjes en linie exact; får vi udført et eksakt test, men det skal man KUN gøre for små stikprøver (ellers bliver beregningerne meget tunge og dermed langsommelige)


proc corr

Benyttes til at beregne korrelationer. Her kan man f.eks. angive Pearson (parametrisk, forudsætter at man har en todimensionel normalfordeling) og Spearman (ikke-parametrisk):

proc corr data=sundby pearson spearman;
var v75 v76;
run;

Man kan angive vilkårligt mange variable i var-linien, derved får man alle parvise korrelationer.


proc ttest

Benyttes til at lave t-test. Den variabel vi ønsker at undersøge (responsvariablen, kvantitativ) angives i en var-linie.

Et one-sample t-test, hvor vi undersøger om middelværdien i én gruppe er lig en bestemt værdi, opnås ved syntaksen (find video med eksempel og forklaring i video-menuen øverst)

proc ttest data=sundby h0=170;
var v76;
run;

Bemærk option h0=170 i proc ttest-linien, hvor vi angiver at vi er interesserede i at undersøge om middelhøjden for deltagerne er 170 cm (en fjollet hypotese her hvor vi har mænd og kvinder blandet sammen).

Ønsker vi at sammenligne middelværdien i to grupper, dvs vi vil lave et two-sample t-test, skal vi i en class-linie angive variablen med de to grupper (find video med eksempel og forklaring i video-menuen øverst):

proc ttest data=sundby;
var v76;
class kon;
run;

NB: Rækkefølgen af var- og class-linierne er underordnet.


proc glm

Benyttes til at lave variansanalyse og lineær regression. Den variabel vi ønsker at undersøge (responsvariablen, kvantitativ) angives i en model-linie på venstre side af et lighedstegn, mens den / de forklarende variable anbringes på højre side (adskilt af mellemrum).

I en ensidet variansanalyse sammenligner vi middelværdien i to eller flere grupper. Analysen kaldes ensidet, fordi vi benytter én kategorisk forklarende variabel. Den forklarende variabel skal udover at indgå på højresiden af model-linien også tilføjes i en class-linie, fordi SAS skal have besked på, at det er en kvalitativ variabel. Syntaksen er, når jeg ønsker at undersøge om mænd og kvinder har samme middelhøjde:

proc glm data=sundby plots=DiagnosticsPanel;
class kon;
model v76 = kon / solution clparm;
means kon / hovtest welch;
run;

plots=DiagnosticsPanel genererer de plots vi bruger til at vurdere antagelserne for modellen. Bruger du Enterprise Guide er du nødt til først at 'slå grafikken til' ved at køre linien ods graphics on; inden du kører proceduren (ods=Output Delivery System, med ods kan man styre og gemme output, men det er rimeligt avanceret, så her skal I bare acceptere det som en linie I tilføjer i starten af jeres program (linien skal ikke stå i en procedure)).
Bemærk desuden options solution clparm som sikrer at vi får estimater og konfidensintervaller med i output (lidt fjollet er dette ikke en del af standard output fra glm). Den ekstra means-linie tilføjes når vi ønsker at udføre et formelt test for, om varianserne er ens i grupperne (hovtest=Homogeneity Of Variance test). Den ekstra option welch giver os et overall test for association (mellem respons og forklarende variabel) hvor antagelsen om ens varianser i grupperne ikke behøver være opfyldt.



Når vi laver regressionsanalyse kan vi også bruge proc glm men udelader at sætte den forklarende (kvantitative) variabel i class-linien. Her laver jeg regression af vægt på højde;

proc glm data=sundby plots=DiagnosticsPanel;
model v75 = v76 / solution clparm;
run;

Bemærk at der ikke er nogen means-linie - den kan vi kun bruge for kvalitative variable.

Vi kan beregne den forventede værdi for en person på 175 cm ved at benytte en estimate-linie. Her skal man først specificere en label, som bare er en tekststreng som benyttes til at lokalisere den beregnede størrelse i output. Dernæst sætter man kovariatværdierne ind ved først at angive variabelnavnet og derefter den ønskede værdi (og husker at man skal bruge interceptet også, når man prædikterer):

proc glm data=sundby plots=DiagnosticsPanel;
model v75 = v76 / solution clparm;
estimate "Hoejde 175cm"   intercept 1   v76 175;
where kon=1;
run;

Bemærk at jeg her har benyttet en where-linie, idet jeg kun ønsker prædiktionen udført for mænd (det giver ikke meget mening at prædiktere vægt i en model som er baseret på både mænd og kvinder, når man ikke tager højde for at mænd og kvinder ikke har samme højde (jævnfør den ensidede variansanalyse ovenfor)). Vil man benytte hele materialet når man prædikterer, må man lave en model som har separate regressionslinier for mænd og kvinder (forskelligt interecept og muligvis også forskellige hældninger (interaktion)), dvs man skal lave en multivariabel model.


proc power

Benyttes til at lave styrkeberegninger. Der findes et hav af af muligheder, derfor beskrives kun et par enkelte her. Se SAS' hjemmeside om proc power for flere muligheder.

Når man ønsker at sammenligne middelværdien i to grupper ved et t-test skal man have fat i twosamplemeans som første del af en kommandolinie. Desuden skal man specificere at man ønsker at teste differensen mellem de to grupper med test=diff. Herefter specificerer man de værdier man ønsker beregningerne udført for, og man kan fylde flere værdier ind for de forskellige størrelser (derved undgår man at skulle køre proc power for alle mulige kombinationer af værdierne). Den værdi man ønsker SAS skal beregne, skal sættes til missing (.). Et eksempel hvor vi har SD=25, gennemsnitlig forskel på 10, ønsker antal i hver gruppe bestemt for en power på hhv 0.8 og 0.9 er:

proc power;
twosamplemeans test=diff
meandiff=10 stddev=25
npergroup=. power=0.8,0.9;
run;

Bemærk at vi altså ikke indlæser et datasæt her, men selv fylder værdierne ind. Flere værdier til en option (her power) adskilles af et komma.


proc sgplot

Kan benyttes til at lave en række forskellige plots blandt andet scatterplots, histogrammer og boxplots.

Scatterplot (her vægt (v75) mod højde (v76))

proc sgplot data=sundby;
scatter x=v76 y=v75;
run;

Vi kan få forskellige plot-symboler afhængigt af værdien af en tredie variabel (en group-variabel som skal være kvalitativ, her laver vi forskellige symboler for hvert køn):

proc sgplot data=sundby;
scatter x=v76 y=v75 / group=kon;
run;

Vi kan tilføje en udglatning (a la glidende gennemsnit)

proc sgplot data=sundby;
loess x=v76 y=v75;
run;

Vi kan tilføje en regressionslinie (her gør vi det for hvert køn, igen ved at benytte en group-variabel):

proc sgplot data=sundby;
reg x=v76 y=v75 / group=kon;
run;



Histogram:

proc sgplot data=sundby;
histogram v76;
run;

Hvis der ønskes en normalfordelingstæthed lagt ovenpå tilføjes linien density v76;
Man kan vælge at lægge en data-tilpasset tæthed ovenpå ved at tilføje linien density v76 / type=kernel;
Bemærk at man kan have flere density-linier i samme plot. Man kan yderligere tilføje titel og en legend, se eksempel på SAS' egen hjemmeside her. Histogrammer kan også laves ved hjælp af proc univariate.

Box-plot (her laver vi det så vi får en box for hvert køn):

proc sgplot data=sundby;
vbox v76 / category=kon;
run;

Der findes også en procedure proc boxplot hvor man har flere muligheder for at styre, hvordan plottet skal se ud og hvad der skal tilføjes af deskriptive størrelser. Se eksemplerne på SAS' hjemmeside her.




Denne side er sidst opdateret
Copyright © Susanne Rosthøj 2017.