Navneord i flertal - Website for tysk på Frisholm

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