En Introduktion til SAS



Relaterede dokumenter
En Introduktion til SAS. Kapitel 5.

ØVELSE 2B. Formål Det primære formål med denne øvelse er at prøve nogle vigtige procedurer til statistisk og grafisk analyse.

SAS systemet SAS. SAS vinduer Janne Petersen

Introduktion til SAS. Faculty of Health Sciences

Kort intro til SAS. Efterår Janne Petersen Judith L Jacobsen Lene Theil Skovgaard

Hvorfor SAS Kort intro til SAS

Afdeling for Anvendt Matematik og Statistik December 2006

Kommentarer til øvelser i basalkursus, 2. uge

Postoperative komplikationer

Afdeling for Teoretisk Statistik August 2004 Institut for Matematisk fag Aarhus Universitet. Jørgen Granfeldt INTRODUKTION TIL SAS 1

Variansanalyse i SAS. Institut for Matematiske Fag December 2007

Regressionsanalyse i SAS

Det kunne godt se ud til at ikke-rygere er ældre. Spredningen ser ud til at være nogenlunde ens i de to grupper.

Kvantitative Metoder 1 - Forår Dagens program

Modelkontrol i Faktor Modeller

Statistiske Modeller 1: Kontingenstabeller i SAS

Bilag til Statistik i løb : Statistik og Microsoft Excel tastevejledning / af Lars Bo Kristensen

MPH specialmodul i epidemiologi og biostatistik. SAS. Introduktion til SAS. Eksempel: Blodtryk og fedme

PROC TRANSPOSE. SAS-tabellen - hensigtsmæssig lagring af data. Copyright 2011 SAS Institute Inc. All rights reserved.

Opgavebesvarelse, Basalkursus, uge 3

Øvelser i epidemiologi og biostatistik, 6. april 2010 Baseline-informationer fra Ebeltoft datasættet Eksempel på besvarelse

Kort introduktion til SAS

Løsning eksamen d. 15. december 2008

Introduktion til SPSS

SAS systemet. Kort introduktion til SAS. SAS vinduer. Janne Petersen. Efterår 2013

Normalfordelingen. Statistik og Sandsynlighedsregning 2

Opgaver til ZAR II. Afdeling for Anvendt Matematik og Statistik Michael Sørensen Oktober Opgave 1

Deskriptiv statistik. Version 2.1. Noterne er et supplement til Vejen til matematik AB1. Henrik S. Hansen, Sct. Knuds Gymnasium

Opgave 1 Betragt to diskrete stokastiske variable X og Y. Antag at sandsynlighedsfunktionen p X for X er givet ved

Projekt 8.3 Hvordan undersøges om et talmateriale normalfordelt?

Billedbehandling og mønstergenkendelse: Lidt elementær statistik (version 1)

Reeksamen i Statistik for biokemikere. Blok

Naturvidenskabelig Bacheloruddannelse Forår 2006 Matematisk Modellering 1 Side 1

Øvelser i epidemiologi og biostatistik, 12. april 2010 Ebeltoft-projektet: Analyse af alkoholrelaterede data mm. Eksempel på besvarelse

Løsning til eksamen d.27 Maj 2010

Anvendt Statistik Lektion 6. Kontingenstabeller χ 2- test [ki-i-anden-test]

Statistiske modeller

n r x rs x r = 1 n r s=1 (x rs x r ) 2, s=1

Statistik (deskriptiv)

Vejledende besvarelse af eksamen i Statistik for biokemikere, blok

MPH specialmodul i epidemiologi og biostatistik. SAS. Introduktion til SAS. Eksempel: Blodtryk og fedme

Statistik FSV 4. semester 2014 Øvelser Uge 2: 11. februar

Institut for Matematiske Fag Sandsynlighedsregning og Statistik 2. R opgaver

Tegning af grafer. Grafen for en ligning (almindelig) Skriv ligningen ind. Højreklik og vælg Plots -> 2-D Plot of Right Side.

Lineær regression. Simpel regression. Model. ofte bruges følgende notation:

Statistik og Sandsynlighedsregning 2. Repetition og eksamen. Overheads til forelæsninger, mandag 7. uge

Opgavebesvarelse, logistisk regression

Program. Konfidensinterval og hypotesetest, del 2 en enkelt normalfordelt stikprøve I SAS. Øvelse: effekt af diæter

Vejledende besvarelse af hjemmeopgave i Basal statistik for lægevidenskabelige forskere, forår 2013

Eksamen i Statistik for biokemikere. Blok

Man indlæser en såkaldt frequency-table i SAS ved følgende kommandoer:

Matematik A. Studentereksamen. Forberedelsesmateriale til de digitale eksamensopgaver med adgang til internettet

CLASS temp medie; MODEL rate=temp medie/solution; RUN;

Binomial fordeling. n f (x) = p x (1 p) n x. x = 0, 1, 2,...,n = x. x x!(n x)! Eksempler. Middelværdi np og varians np(1 p). 2/

Schweynoch, Se eventuelt

Statistik Lektion 20 Ikke-parametriske metoder. Repetition Kruskal-Wallis Test Friedman Test Chi-i-anden Test

Anvendt Statistik Lektion 6. Kontingenstabeller χ 2 -test [ki-i-anden-test]

Lars Andersen: Anvendelse af statistik. Notat om deskriptiv statistik, χ 2 -test og Goodness of Fit test.

Basal statistik. 30. januar 2007

2 -test. Fordelingen er særdeles kompleks at beskrive med matematiske formler. 2 -test blev opfundet af Pearson omkring år 1900.

Basal Statistik Kategoriske Data

Køn. Holdning Mænd Kvinder Ialt JA NEJ VED IKKE

Opgavebesvarelse, Basalkursus, uge 3

Normalfordelingen og Stikprøvefordelinger

Reeksamen i Statistik for Biokemikere 6. april 2009

Økonometri 1 Forår 2006 Ugeseddel 11

1 Start og afslutning. Help.

Oversigt. Introduktion til Statistik. Forelæsning 2: Stokastisk variabel og diskrete fordelinger

Løsning til eksaminen d. 14. december 2009

Oversigt. Kursus Introduktion til Statistik. Forelæsning 3: Kapitel 5: Kontinuerte fordelinger. Per Bruun Brockhoff.

Vi ønsker at konstruere normalområder for stofskiftet, som funktion af kropsvægten.

Statistik med TI-Nspire CAS version 3.2. Bjørn Felsager September [Fjerde udgave]

Normalfordelingen. Statistik og Sandsynlighedsregning 2

Statistik Lektion 1. Introduktion Grundlæggende statistiske begreber Deskriptiv statistik

Statistik Lektion 1. Introduktion Grundlæggende statistiske begreber Deskriptiv statistik Sandsynlighedsregning

Program dag 2 (11. april 2011)

KURSUS I ANALYSEPORTALEN (AP) DANSK PALLIATIV DATABASE 3 1. ÅBNING AF ANALYSEPORTALEN 3 2. OPRETTELSE AF EN RAPPORT DVS. START AF DATAANALYSE 4

Analysestrategi. Lektion 7 slides kompileret 27. oktober :24 p.1/17

Grupperede observationssæt Deskriptiv statistik: Middelværdi, frekvensfordeling, sumkurve, kvartilsæt, boxplot

Økonometri 1 Efterår 2006 Ugeseddel 11

Adgangsgivende eksamen (udeladt kategori: Matematisk student med matematik på niveau A)

Statistik i GeoGebra

I dag. Statistisk analyse af en enkelt stikprøve: LR test og t-test, modelkontrol, R Sandsynlighedsregning og Statistik (SaSt)

MPH specialmodul Epidemiologi og Biostatistik

Forelæsning 3: Kapitel 5: Kontinuerte fordelinger

Afdeling for Anvendt Matematik og Statistik Januar Regressionsanalyse i SAS 2. Regressionsanalyse med GLM Sammenligning af regressionslinier

Variansanalyse i SAS 1. Institut for Matematiske Fag December 2007

INTRODUKTION TIL SAS

Lineær og logistisk regression

Kapitel 7 Forskelle mellem centraltendenser

Faculty of Health Sciences. Logistisk regression: Kvantitative forklarende variable

Tips og tricks til Proc Means. Per Andersen

Hvorfor er det lige at vi skal lære det her?

(studienummer) (underskrift) (bord nr)

Konfidensintervaller og Hypotesetest

Velkommen til StatBK. Program. Introduktion, summary measures, SAS. Praktisk info. Praktisk info

Øvelser til basalkursus, 2. uge

β = SDD xt SSD t σ 2 s 2 02 = SSD 02 f 02 i=1

SAS formater i Danmarks Statistik

Gennemsnit og normalfordeling illustreret med terningkast, simulering og SLUMP()

Transkript:

En Introduktion til SAS Inge Henningsen Afdeling for Statistik og Operationsanalyse Københavns Universitet Februar 2005 6. udgave

i FORORD til 1. udgave Denne introduktion til SAS til brug ved kurset Statistik 0 er udviklet i perioden 1989-93, og knytter sig til de forelæsningsnoter, der er udarbejdet til dette kursus. Det første SAS-notat blev skrevet i 1989 af Arne A. Andreassen og ere andre har ydet bidraget til arbejdet. I sin nuværende form er introduktionen primært baseret på eksempler, og der er lagt vægt på netop de procedurer, der skal bruges på Statistik 0. For en systematisk fremstilling henvises til SAS-manualerne. Det er planen løbende at revidere materialet om SAS. Forslag til forbedringer er derfor velkomne. København, januar 1994 Inge Henningsen FORORD til 6. udgave. Denne udgave af En Introduktion til SAS er revideret, således at den knytter sig til forelæsningsnoterne til kurserne Statistik og sandsynlighedsregning 1-3, Inge Henningsen: En Introduktion til Statistik, Bind 1, 2 og 3, Afdeling for anvendt Matematik og Statistik, Københavns Universitet 2004-5. København, februar 2005 Inge Henningsen

ii

Kapitel 1 Indledning Denne introduktion til SAS (Statistical Analysis System) knytter sig til forelæsningsnoterne til kurserne Statistik og sandsynlighedsregning 1-3, Inge Henningsen: En Introduktion til Statistik, Bind 1, 2 og 3, Afdeling for anvendt Matematik og Statistik, Københavns Universitet 2004-5. SAS er et omfattende programsystem til databehandling og statistisk bearbejdelse af data, og denne fremstilling behandler kun en lille del. SAS indeholder en lang række af procedurer, der er inddelt i moduler efter deres anvendelsesområde. På SaSt2 vil der være adgang til modulerne SAS Base, SAS/STAT og SAS/GRAPH, der indeholder henholdvis procedurer til databehandling og -præsentation, til statistisk analyse og til grask præsentation. Der er ikke tilstræbt nogen systematisk gennemgang af SAS. Fremstillingen er baseret på eksempler, og der er lagt vægt på de fundamentale procedurer, der skal bruges på SaSt-kurserne. Yderligere oplysninger kan ndes i SAS Language Guide for Personal Computers, SAS Procedures Guide, SAS/STAT User's Guide og SAS/GRAPH User's Guide. En elementær indføring I SAS på dansk kan ndes I Andersen, A.T, Bedsted, T.V, Feilberg, M. Jakobsen, R.B & Anders Milhøj: Elementær indføring i SAS, Akademisk Forlag, København 2002. Et SAS-program indeholder DATA-trin og PROCEDURE-trin (se nærmere i afsnit 3.9). I kapitel 2 gennemgås data-trinnet, og det vises, hvorledes man opretter og indlæser SAS-datasæt. Ved hjælp af eksempler gennemgås omregninger af data og konstruktion af nye variable, og der

2 Indledning gives en oversigt over de almindeligste regneudtryk. I kapitel 3 gennemgås fundamentale procedurer til statistisk databehandling, først og fremmest procedurer til beregning af gennemsnit, varians, standardafvigelse etc. og procedurer til tabellering af data, samt simple statistiske beregninger. Kapitel 4 handler om grak, og her gennemgås de to graske procedurer PROC GCHART og PROC GPLOT til tegning af blokdiagrammer og grafer. I et senere kapitel 5 vises, hvorledes t-test og regressionsanalyse kan udføres ved hjælp af SAS.

Kapitel 2 Indlæsning og tilrettelæggelse af DATA i SAS 2.1 Indledning I dette kapitel vises, hvorledes man opretter og indlæser SAS-datasæt. Ved hjælp af eksempler gennemgås de omregninger af data, der er nødvendige på SaSt 1-3. Yderligere oplysninger kan ndes i SAS Language Guide for Personal Computers. SAS kræver, at data er bragt på en standardiseret form. Dette opnås ved at indlæse data i et DATA-trin, hvorved der oprettes et SAS-datasæt. Et datasæt, der kan bruges i SAS, består af et antal variable og et sæt af observationer med en observationsværdi for hver af de variable. Bemærk, at SAS-variable ikke behøver at have numeriske værdier. Når datasættet er oprettet, kan man regne på variablene som vist i de følgende programeksempler. Kapitlet er organiseret således, at programmerne står i teksten og alle udskrifterne er samlet sidst i kapitlet. Udskrifterne er lavet med proceduren PRINT, der omtales i afsnit 3.2. Eks. 2.1.1 Opstilling af data til brug i SAS. Ved en undersøgelse af studentereksamenskarakterer, ønskede man at analysere sammenhæng mellem karakter og niveauet i forskellige fag. For hver eksamination har man en observation med de tre oplysninger fag, niveau og karakter. De kan opstilles i et datasæt som vist i eksempel 2.2.1. Datasættet har tre variable: fag, niveau og karakter og otte observationer.

4 Indlæsning og tilrettelæggelse af DATA i SAS FAG NIVEAU KARAKTER mat h 10 eng h 9 mat h 7 samf m 6 kem o 8 mat m 8 samf h 13 mus h 5 Her er fag og niveau tekstvariable, mens karakter er en numerisk variabel. 2.2 Indlæsning af data For at bruge SAS på data fra eksempel 2.1.1 skal de indlæses. I SAS kan man skrive data direkte ind i programmet. Man kan også hente dem fra et allerede eksisterende SAS-datasæt (eller fra en ASCII l, men det vil ikke blive gennemgået her). Ethvert SAS-program begynder med navnet på det datasæt man vil arbejde med: DATA datanavn; (ordrer) (evt. data) Et datasæt kan enten være midlertidigt eller permanent. Et midlertidigt datasæt slettes, når man forlader programmet. Et permanent datasæt bevares som en l og kan bruges i senere programmer. Datanavnet bestemmer om datasættet bliver midlertidigt eller permanent. Et midlertidigt datasæt har et navn bestående af højst otte tegn. Tegnene kan være bogstaver (A,...,Z), tal (0,...9) eller (_). Det første tegn skal være et bogstav. Et permanent SAS-datasæt skal have et todelt navn f. eks. karakter.data. Datasættene til hjemmeopgaver etc. er af denne type. Oprettelse af permanente datasæt vil blive omtalt i afsnit 2.6. Nedenstående eksempel viser, hvorledes man skriver et datasæt direkte i programlen. Data er studentereksamenskaraktererne fra eksempel 2.1.1. Hver observation svarer til en student og indeholder oplysninger om de tre variable fag, niveau, og karakter for den enkelte student. Datasættet navngives ved kommandoen DATA efterfulgt af et datanavn. De variable navngives ved kommandoen INPUT efterfulgt af variabelnavne. Også disse må højst være på otte tegn. Tegnene kan være bogstaver (A,

2.2 Indlæsning af data 5...,Z), tal (0,...,9) eller (_). Hvis ikke alle værdierne for en variabel er numeriske, angives dette ved at skrive $ efter navnet som i eksempel 2.2.1. Kommandoen CARDS fortæller, at nu kommer data. Derefter følger selve datasættet, hvor hver linie svarer til en observation og hvor værdierne de enkelte variable står i samme kolonne. Manglende værdier angives med. eller en tom plads. Indlæsning af data slutter altid med ';'. I SAS bruges ';' til at adskille kommandoer (men ikke dataværdier). Linieskift betyder ingenting i SAS, når man skriver programmer. SAS skelner heller ikke mellem store og små bogstaver. Efter DATA-trinnet i eksempel 2.2.1 vil der være oprettet et SAS-datasæt, der hedder karakter. Der vil være 8 observationer i datasættet, og hver observation indeholder værdier for de tre variable fag, niveau, og karakter. Beder man om en udskrift ser datasættet ud som vist i Udskrift 2.2.1 sidst i kapitlet. Kolonnen OBS angiver observationens nummer. Det ligger samtidig i datasættet som en variabel med navn _N_ og kan bruges i senere programtrin. I det følgende bruges den konvention, at SAS-variable, SAS-datasæt, SAS-programmer og SAS-udskrifter angives med maskinskrift. I programmerne angives de faste kommandoer med store bogstaver. Navne man selv kan vælge skrives med småt. Eks. 2.2.1 Indlæsning af datasæt direkte i program. DATA karakter; INPUT fag $ niveau $ karakter; CARDS; mat 10 eng h 9 mat h 7 samf m 6 kem o mat m 8 samf 13 mus h 5 ; Har man konstrueret et SAS-datasæt kan dette genbruges i et følgende programtrin ved ordren SET, som vist i næste eksempel, der giver samme udskrift som eksempel 2.2.1. Eks. 2.2.2 Indlæsning af eksisterende SAS-datasæt ved SET. DATA karakter; INPUT fag $ niveau $ karakter; CARDS;

6 Indlæsning og tilrettelæggelse af DATA i SAS mat h 10 eng h 9 mat h 7 samf m 6 kem o 8 mat m 8 samf h 13 mus h 5 ; DATA nykar; SET karakter; Nu indeholder datasættet nykar en kopi af datasættet karakter. En sådan kopiering bruges, hvis man skal omregne nogle af de variable, men stadig vil bevare det oprindelige datasæt (og det bør man altid). Både karakter og nykar vil blive glemt, når man går ud af programmet, da det ikke er permanente datasæt. Advarsel: Hvis man giver det nye datasæt samme navn som det gamle overskrives det oprindelige datasæt. Dette gælder også for permanente datasæt. 2.3 Konstruktion af deldatasæt Når man skal præsentere og analysere data, er det ofte interessant at udvælge dele af materialet til separat bearbejdning. Det kan enten være en gruppe af observationer eller en gruppe af variable svarende til at man udtager enten rækker eller søjler (eller begge dele) af datamatricen. Det kan også være nødvendigt at konstruere nye variable ved gruppering eller beregning. Sådanne operationer foregår i DATA-trinnet. I de efterfølgende afsnit angives nogle metoder til at klare disse problemer. Eksemplerne går ud fra datasættet karakter indlæst i eksempel 2.2.1, og denne indlæsning forudsættes, når datasættet karakter forekommer, selv om den af pladshensyn ikke skrives hver gang. Udvælgelse af variable Der er to måder at udvælge variable på. Enten angives navnene på de variable, der ønskes bevaret, sammen med ordren KEEP, eller også navnene på de variable, der ønskes fjernet, sammen med ordren DROP. Eks. 2.3.1. Udvælgelse af variable ved brug af KEEP.

2.3 Konstruktion af deldatasæt 7 DATA nykar; SET karakter; KEEP fag karakter; Her indlæses de to variable fag og karakter fra datasættet karakter. Datasættet nykar indeholder nu alle de oprindelige observationer af fag og karakter, mens variablen niveau er ikke med i nykar. Eks. 2.3.2. Udvælgelse af variable ved brug af DROP. DATA nykar; SET karakter; DROP niveau; Dette program giver samme datasæt som eksempel 2.3.1. Har man store datasæt er det af pladshensyn vigtigt at fjerne unødvendige variable, før man bruger procedurer som SORT etc. Udvælgelse af observationer Man kan også udvælge observationer på ere måder. Enten ved at angive hvilke observationer man ønsker at medtage, eller ved at angive hvilke observationer man ikke vil have med. I begge tilfælde har man brug for et udvælgelseskriterium (logisk udtryk). Dette er sætninger, der begynder med IF, og derefter beskriver de betingelser, der skal være opfyldt. Eks. 2.3.3. Konstruktion af deldatasæt med IF. DATA nykar; SET karakter; IF karakter > 8; Med IF-sætningen opnås, at kun de observationer, hvor karakter > 8, overføres til datasættet nykar. Se Udskrift 2.3.3. Bruges IF alene beholder man de udvalgte observationer. Sætningen IF...THEN DELETE har den modsatte virkning. Her udelades de udvalgte observationer som i nedenstående program Eks. 2.3.4. Konstruktion af deldatasæt med IF...THEN DELETE. DATA nykar; SET karakter; IF karakter > 8 THEN DELETE; Her udelades de observationer, der kom med før. Se Udskrift 2.3.4.

8 Indlæsning og tilrettelæggelse af DATA i SAS Man kan have ere IFsætninger i samme program. Eks. 2.3.5. Konstruktion af deldatasæt ved brug af ere IFsætninger. DATA nykar; SET karakter; IF karakter le 8 ; IF fag = 'mat'; Resultatet er vist i Udskrift 2.3.5. Bemærk, at værdier for tekstvariable skali'',nårmanmanbrugerdemsammenmed=oglignendeoperatorer. De logiske udtryk kan sammensættes af følgende operatorer. Disse kan skrives med tegn eller med bogstaver, som vist i de to første kolonner. 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 <= 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 niveau = 'h' OR eller karakter = 8 OR niveau = 'o' NOT negation NOT(karakter IN (6,7,8)) Bemærk: Når man skriver funktionsudtryk er det bedre at sætte for mange end for få paranteser, hvis man vil undgå logiske fejl. 2.4 Sammenetning af datasæt Man har ofte brug for at slå datasæt sammen. Hvis to (eller ere) datasæt indeholder disjunkte observationssæt svarende til de samme variable, kan de slås sammen med ordren SET, der tidligere er blevet brugt til at kopiere et enkelt datasæt. SET lægger datasættene "i forlængelse af hinanden", således at det nye datasæt indeholder de oprindelige variable og alle observationerne. Eks. 2.4.1. Sammenetning af to datasæt ved SET. DATA nykar1;

2.4 Sammenetning af datasæt 9 SET karakter; IF karakter > 8 ; DATA nykar2; SET karakter; IF karakter > 8 THEN DELETE; DATA end; SET nykar1 nykar2; Datasættet nykar1 indeholder alle observationer med karakter > 8, mens nykar2 indeholder alle observationer med karakter 8. Datasættet set indeholder derfor alle observationerne fra karakter. Havde man i det første program skrevet IF karakter > 6, var de oprindelige observationer svarende til karakter=7 og karakter=8 fejlagtigt kommet med to gange som forskellige observationer. Hvis to (eller ere) datasæt indeholder de samme observationer men forskellige variable kan man bruge ordren MERGE, der lægger datasættene "ved siden af hinanden", således at det nye datasæt indeholder de oprindelige observationer og alle variablene. Eks. 2.4.2. Sammenetning af to datasæt ved MERGE. DATA nykar1; SET karakter; KEEP fag karakter; DATA nykar2; SET karakter; DROP fag karakter; DATA merge1; MERGE nykar1 nykar2; Datasættet nykar1 indeholder de to variable fag og karakter, mens nykar2 indeholder variablen niveau. Datasættet merge1 indeholder derfor de tre variable fra karakter. Havde man i et af de to datasæt byttet rundt på rækkefølgen af de observationerne, var forkerte værdier blevet parret sammen. For at undgå dette sørge man i almindelighed for, at datasættet indeholder en identikationsvariabel (kan f. eks. konstrueres med den før omtalte variabel _N_) og matcher på denne variabel, som vist nedenfor. Hvis to datasæt har en fælles variabel kan man matche på denne ved ordren BY variabelnavn, hvorved observationer med samme værdi af den matchende variabel bliver sat sammen. Dette kræver, at datasættene er

10 Indlæsning og tilrettelæggelse af DATA i SAS sorteret efter den matchende variabel og bør i almindelighed kun bruges, når den matchende variabel har en ny værdi for hver observation. En undtagelse er, hvis man har en værdi, som man ønsker at knytte til hver observation i en gruppe. Her kan man også bruge MERGE...BY, for optræder den matchende variabel et forskelligt antal gange i de to datasæt gentages sidste observation i det "korte"datasæt et antal gange indtil det hele går op, som vist eksempel 2.2.4. MERGE er en nyttig, men farlig ordre. Man bør altid undersøge, om man nu har fået det datasæt, man egentlig ønskede. Eks. 2.4.3. Sammenetning af to datasæt ved MERGE og BY. DATA nykar1; SET karakter; id=_n_; KEEP id fag karakter; DATA nykar2; SET karakter; id=_n_; KEEP id niveau; PROC SORT DATA=nykar1; BY id; PROC SORT DATA=nykar2; BY id; DATA merge2; MERGE nykar1 nykar2; BY id; Eks. 2.4.4. Sammenetning af to datasæt med gentagelse af værdier. DATA nykar; SET karakter; DATA nykode; INPUT niveau $ kode; CARDS; h 1 m 2 o 3 ; PROC SORT DATA=nykar; BY niveau; PROC SORT DATA=nykode; BY niveau; DATA merge3; MERGE nykar nykode; BY niveau;

2.5 Konstruktion af nye variable 11 Det nye datasæt indeholder de re variable fag, niveau, karakter og kode, hvor kode antager værdier 1, 2 og 3, når niveau antager værdierne h, m og o. Denne konstruktion anvendes f. eks., når man ønsker at knytte et gruppegennemsnit til hver observation. Brug af SET og MERGE kan betragtes som det omvendte af udvælgelse af observationer hhv. udvælgelse af variable. 2.5 Konstruktion af nye variable I SAS skal nye variable ikke deklareres. De oprettes og navngives, når de deneres i programmet. Nye variable kan deneres ved omregning eller gruppering af eksisterende variable. Endvidere kan man konstruere variable ved DOordrer. Nye variable ved beregning Man kan danne nye variable ved hjælp af regneudtryk. Nedenfor følger en liste over de vigtigste operatorer og funktioner.

12 Indlæsning og tilrettelæggelse af DATA i SAS Operatorer: ** potensopløftning * multiplikation / division + addition - subtraktion Funktioner: EXP(argument) eksponentialfunktion LOG(argument) naturlig logaritme LOG2(argument) to-tals logaritme SIN(argument) sinus COS(argument) cosinus SQRT(argument) kvadratrod ABS(argument) numerisk værdi INT(argument) den hele del af ROUND(argument, afrundingsenhed) afrundet værdi DIF(argument) 1. dierens (x n x n 1 ) GAMMA(argument) γfunktionen POISSON(lambda, argument) Fordelingsfunktion for Poissonfordeling PROBBNML(p,n, argument) Fordelingsfunktion for Binomialfordeling PROBCHI(argument, frihedsgrader) Fordelingsfunktion for χ fordelingen 2 PROBT(argument, frihedsgrader) Fordelingsfunktion for Tfordelingen PROBNORM(argument) Fordelingsfunktion for Ufordelingen PROBIT(argument) Den inverse Ufordeling I SAS: Language Guide ndes en fuldstændig liste over operatorer og funktioner. Eks. 2.5.1. Konstruktion af nye variable ved beregning. DATA nykar; SET karakter; k=10*karakter; m=13-karakter; Det nye datasæt består af de gamle variable sammen med de to nye variable k og m. Se Udskrift 2.5.1.

2.5 Konstruktion af nye variable 13 Nye variable ved gruppering IFsætninger kan bruges til at danne nye variable ud fra de oprindelige ved at slå værdier sammen. Eks. 2.5.2. Konstruktion af variable ved at slå værdier sammen. DATA nykar; SET karakter; IF karakter GE 6 THEN bestod = 'ja'; ELSE bestod = 'nej'; IF fag='mat' OR fag='kemi' THEN kode= 'nat'; ELSE IF fag = 'eng' THEN kode= 'sprog'; ELSE kode = 'andet'; SAS-datasættet karakter hentes ind, og der konstrueres to nye variable: bestod, der har værdien ja, når karakter er større end eller lig med 6, og nej ellers; og kode, der har værdien nat, når fag enten er mat eller kemi, værdien sprog, når fag er eng og andet ellers. Se udskrift 2.5.2. Konstruktion af nye variable ved ordrerne DO og SUM Man kan konstruere variable ved ordrerne DO og SUM. Eks. 2.5.3. Konstruktion af SAS-variabel ved DO. DATA itera1; DO i=1 TO 6; OUTPUT; END; Ordren OUTPUT gør, at alle dataværdier bevares, så man får et datasæt med 6 observationer og en variabel i med værdierne 1,2,...,6. Eks. 2.5.4. Konstruktion af ere SAS-variable ved DO. DATA itera2; DO i=1 TO 6; DO j=2 TO 8 by 2; OUTPUT; END; END; Ordren OUTPUT giver et datasæt indeholdende 24 observationer, nemlig alle kombinationer af variablen i med værdierne 1,2,...,6 og variablen j med værdierne 2,4,6,8.

14 Indlæsning og tilrettelæggelse af DATA i SAS Med ordren SUM kan man konstruere fortsatte delsummer af de variable eller af funktioner af de variable f. eks. til brug ved tegning af fraktildiagrammer. Eks. 2.5.5. Konstruktion af SAS-variabel ved SUM. DATA sum; SET karakter; sumn+1; sumk+karakter; sumk2+karakter*2; sumksq+karakter*karakter; Datasættet sum indeholder de gamle variable sammen med re nye variable sumn, sumk, sumk2, sumksq. Her angiver sumn observationsnummer, sumk angiver de kumulerede værdier af variablen karakter, sumk2 angiver de kumulerede værdier af variablen karakter multipliceret med 2 og sumksq angiver de kumulerede værdier af variablen karakter. 2 Permanente SAS-datasæt Et permanent data sæt oprettes på samme måde som et midlertidigt datasæt. Den eneste forskel er, at et permanent datasæt skal have et todelt navn. I almindelighed ligger de permanente datasæt i biblioteker, der oprettes ved en såkaldt libname-kommando. På Stat 0 er der oprettet det permanente bibliotek stat0, der bruges i hjemmeopgaver og andre opgaver. Her ligger der datasæt, der hedder datanavn.ssd og som kan kopieres ind i egne programmer med ordren SET stat0.datanavn. Eks. 2.6.1. Oprettelse af permanent SAS-datasæt. DATA mylib.karakter; SET karakter; Her kopieres datasættet karakter over i karakter.ssd, der er et permanent datasæt og ligger i biblioteket mylib. Det kan nu kaldes i senere programmer med den sædvanlige SETordre. Eks. 2.6.2. Indlæsning af permanent SAS-datasæt. DATA nykar; SET mylib.karakter; Syntaks

2.6 Udskrifter 15 Dette afsnit indeholder nogle grundregler om syntaks i SAS. En del af bemærkningerne står andre steder i teksten, men gentages her. Syntaksen omtales udførligt i SAS Language Guide. Adskillelse af kommandoer i SAS sker med ';'. Linieskift betyder ingenting i SAS. Store og små bogstaver betyder ingenting i SAS. Variable skal ikke deklareres i SAS. De navngives samtidig med at de deneres. Navne på datasæt og variable må højst bestå af 8 tegn. Disse kan være bogstaver (A,...,Z), tal (0,...9) eller (_). Det første tegn skal være et bogstav. Værdier for tekstvariable skal i ' ', når man man bruger dem sammen med = og lignende operatorer. Parentes i SAS er /*...*/. Tekst mellem /* og */ læses ikke i programmer. Udskrifter i tekst og grak styres af OPTIONS...; hhv. GOPTIONS...;. Overskrifter speciceres med TITLE '...';. Tekstredigering Standardtekstredigering i SAS-programmer ligner tekstredigering f. eks. i Word. 2.6 Udskrifter Dette afsnit indeholder udskrifter fra SAS-programmerne. UDSKRIFT 2.2.1: OBS FAG NIVEAU KARAKTER 1 mat h 10 2 eng h 9 3 mat h 7 4 samf m 6 5 kem o 8 6 mat m 8 7 samf h 13 8 mus h 5

16 Indlæsning og tilrettelæggelse af DATA i SAS UDSKRIFT 2.3.1: OBS FAG KARAKTER 1 mat 10 2 eng 9 3 mat 7 4 samf 6 5 kem 8 6 mat 8 7 samf 13 8 mus 5 UDSKRIFT 2.3.3: OBS FAG NIVEAU KARAKTER 1 mat h 10 2 eng h 9 3 samf h 13 UDSKRIFT 2.3.4: OBS FAG NIVEAU KARAKTER 1 mat h 7 2 samf m 6 3 kem o 8 4 mat m 8 5 mus h 5 UDSKRIFT 2.3.4: OBS FAG NIVEAU KARAKTER 1 mat h 7 2 mat m 8

2.6 Udskrifter 17 UDSKRIFT 2.4.3: OBS FAG KARAKTER ID NIVEAU 1 mat 10 1 h 2 eng 9 2 h 3 mat 7 3 h 4 samf 6 4 m 5 kem 8 5 o 6 mat 8 6 m 7 samf 13 7 h 8 mus 5 8 h UDSKRIFT 2.4.4: OBS FAG NIVEAU KARAKTER KODE 1 mat h 10 1 2 eng h 9 1 3 mat h 7 1 4 samf h 13 1 5 mus h 5 1 6 samf m 6 2 7 mat m 8 2 8 kem o 8 3 UDSKRIFT 2.5.1: OBS FAG NIVEAU KARAKTER K M 1 mat h 10 100 3 2 eng h 9 90 4 3 mat h 7 70 6 4 samf m 6 60 7 5 kem o 8 80 5

18 Indlæsning og tilrettelæggelse af DATA i SAS 6 mat m 8 80 5 7 samf h 13 130 0 8 mus h 5 50 8 UDSKRIFT 2.5.2: OBS FAG NIVEAU KARAKTER BESTOD KODE 1 mat h 10 ja nat 2 eng h 9 ja spr 3 mat h 7 ja nat 4 samf m 6 ja and 5 kem o 8 ja and 6 mat m 8 ja nat 7 samf h 13 ja and 8 mus h 5 ne and UDSKRIFT 2.5.5: OBS FAG NIVEAU KARAKTER SUMN SUMK SUMK2 SUMKSQ 1 mat h 10 1 10 20 100 2 eng h 9 2 19 38 181 3 mat h 7 3 26 52 230 4 samf m 6 4 32 64 266 5 kem o 8 5 40 80 330 6 mat m 8 6 48 96 394 7 samf h 13 7 61 122 563 8 mus h 5 8 66 132 588

Kapitel 3 SAS-procedurer 3.1 Indledning SAS indeholder en lang række af procedurer, der er inddelt i moduler efter deres anvendelsesområde. I dette kapitel gennemgås fundamentale procedurer til databehandling og datapræsentation. Det drejer sig om procedurer til beregning af gennemsnit, varians, standardafvigelse etc. og procedurer til tabellering af data, samt simple statistiske beregninger. Yderligere oplysninger fås i SAS Procedures Guide og SAS/STAT User's Guide. Det følgende afsnit omhandler PROCEDURE-trinnet. Det antages, at DATA-trinnet er afsluttet, således at data ligger i et SAS-datasæt med de relevante variable. Et SAS-program ser da sådan ud; PROC procnavn DATA=datanavn; (ordrer vedr. udførelsen) RUN; Her gælder følgende: Datanavnet angiver hvilket SAS-datasæt proceduren skal arbejde på. Udelades DATA=datanavn benytter proceduren det sidst oprettede SAS-datasæt. Det er en god vane, altid at specicere sit datasæt. Derved sparer man sig selv for mange overraskelser. RUN afslutter altid alle SAS-programmer. Ordrer: Der vil for hver af de efterfølgende procedurer blive angivet en

20 SAS-procedurer række lovlige ordrer. Her skal blot angives to, der kan benyttes for næsten alle procedurer, nemlig VAR variabelnavn og BY variabelnavn. VAR: Skriver man i sit program PROC procnavn DATA=datanavn; VAR variabelnavn; udføres den valgte procedure kun på variablen variabelnavn. Hvis VAR ikke angives, udføres proceduren på alle de variable i SAS-datasættet. BY: Skriver man i sit program PROC procnavn DATA=datanavn; BY variabelnavn; opdeles datasættet i deldatasæt svarende til de forskellige værdier af variabelnavn og proceduren udføres på hvert deldatasæt for sig. Bemærk, at SAS-datasættet skal være sorteret efter variablen variabelnavn før proceduren udføres. PROC SORT benyttes til denne sortering. 3.2 PROC PRINT Det er til tider nyttigt, at få udskrevet observationerne i et SAS-datasæt. Hertil benytter man PROC PRINT. Eks. 3.2.1. Udskrift af datasæt ved brug af PROC PRINT. PROC PRINT DATA=karakter; Alle datasæt i afsnittet Udskrifter i kapitel 2 er udskrevet med PROC PRINT. Nedenfor er vist eksempler på PROC PRINT kombineret med VAR og med BY. Variabelrækkefælgen i VAR bestemmer i hvilken rækkefølge de variable bliver udskrevet. Vil man ikke have observationsummer med i sin udskrift skriver man PROC PRINT NOOBS. Eks. 3.2.2. Udskrift af datasæt. Variabeludvælgelse ved VAR. PROC PRINT DATA=karakter; VAR fag karakter; Eks. 3.2.3. Udskrift af datasæt. Opdeling i grupper ved BY. PROC SORT DATA=karakter; BY niveau; PROC PRINT DATA=karakter; BY niveau;

3.3 PROC CONTENTS 21 Man skal i almindelighed ikke bruge PROC PRINT på store datasæt. 3.3 PROC CONTENTS Ovenfor blev det vist, hvordan man kunne få udskrevet observationerne i et SAS-datasæt ved hjælp af PROC PRINT. Skal man bare have oplysninger om antallet af observationer og navnene på de variable kan man bruge PROC CONTENTS. Eks. 3.3.1. Summariske oplysninger om SAS-datasæt ved PROC CONTENTS. PROC CONTENTS DATA=karakter; Dette giver Udskrift 3.3.1. 3.4 PROC SORT Denne procedure kan sortere et SAS-datasæt efter en eller ere variable. Eks. 3.4.1. Sortering af SAS-datasæt ved PROC SORT. PROC SORT DATA=karakter; BY niveau; Datasættet karakter er efter dette program sorteret således, at alle observationer med samme værdi af variablen niveau er samlet. Eks. 3.4.2. Sortering af SAS-datasæt efter to variable ved PROC SORT. PROC SORT DATA=karakter; BY niveau karakter; Nu er datasættet karakter først sorteret efter voksende værdier af niveau, og for hver værdi af niveau er observationerne så sorteret efter voksende værdier af karakter. Ønsker man data sorteret efter aftagende værdier af en sorteringsvariabel, skrives DESCENDING før den pågældende variabel. Eks. 3.4.3. Sortering af SAS-datasæt efter aftagende værdier af variabel. PROC SORT DATA=karakter; BY niveau DESCENDING karakter; Her er datasættet karakter først sorteret efter voksende værdier af variablen niveau, og for hver værdi af niveau er observationerne sorteret efter aftagende værdier af variablen karakter.

22 SAS-procedurer 3.5 PROC MEANS I store datamaterialer er det normalt vanskeligt at overskue alle observationerne. PROC MEANS kan være til hjælp i sådanne situationer. Samtidig er det den procedure man bruger, når man f. eks. ønsker at beregne summer, gennemsnit eller standardafvigelse for et observationssæt. Eks. 3.5.1. Beregning af gennemsnit, standardafvigelse etc. ved PROC MEANS. PROC MEANS DATA=karakter; VAR karakter; Dette giver Udskrift 3.5.1. PROC MEANS beregner nedenstående størrelser ud fra værdierne for de enkelte observationer af SAS-variablen karakter. Man kan selv styre hvilke størrelser man ønsker udskrevet ved at skrive de pågældende efter PROC MEANS i programmet. Skriver man ingenting får man udskrevet N MIN MAX MEAN STD, som i eksempel 3.5.1. Denitioner og udskriftstørrelser i PROC MEANS. Det antages, at vi har N ikke-manglende observationer, og vi benytter følgende denitioner x (1) den mindste observation x (N) = den største observation x = 1 Ni=1 x N i. s 2 = 1 Ni=1 (x N 1 i x). 2 Med disse denitioner fås følgende udskriftstørrelser i PROC MEANS: N = antal observationer med ikke-manglende værdier. NMISS = antal observationer med manglende værdier. MEAN = x = gennemsnit eller empirisk middelværdi. STD = s = empirisk spredning eller empirisk standardafvigelse. MIN = x (1). MAX = x (N). RANGE = x (N) x (1) = variationsbredde. SUM = N i=1 x i.

3.5 PROC MEANS 23 VAR =s = empirisk varians. 2 USS N i=1 x 2 i CSS = N i=1 (x i x) = kvadratafvigelsessum. 2 CV = 100s/ x = variationskoecient. STDERR = s/ N = empirisk spredning for gennemsnittet. T = N x/s = T-teststørrelse for hypotesen E(X) = 0, hvis observationerne er normalfordelte. PRT = testsandsynlighed for T-testet. Eks. 3.5.2. Beregning af antal, gennemsnit og sum ved PROC MEANS. PROC MEANS DATA=karakter N MEAN SUM; VAR karakter; Vil man selv kontrollere antal decimaler i udskriften tilføjes MAXDEC=n i programmet sammen med PROC MEANS. Ønsker man f. eks. 2 decimaler skriver man følgende programstump PROC MEANS DATA=karakter N MEAN SUM MAXDEC=2; PROC MEANS kan kombineres med BY som i følgende program, hvor antal sum og gennemsnit udregnes for hver værdi af variablen niveau. Eks. 3.5.3. Beregning for ere grupper ved PROC MEANS og BY. PROC SORT DATA=karakter; BY niveau; PROC MEANS DATA=karakter N MEAN SUM; VAR karakter; BY niveau; Dette giver Udskrift 3.5.3. Det er muligt at få lavet et nyt SAS-datasæt med de beregnede størrelser. Eks. 3.5.4. Oprettelse af datasæt med beregningsværdier fra PROC MEANS. PROC SORT DATA=karakter; BY niveau; PROC MEANS DATA=karakter NOPRINT; VAR karakter; BY niveau; OUTPUT OUT=sum N=n SUM=total; PROC PRINT DATA=sum; Det nye datasæt sum indeholder bl. a. de tre variable niveau, n, total, hvor n er antallet af observationer med den givne værdi af niveau, og

24 SAS-procedurer total er summen af karaktererne for den givne værdi af niveau. PROC PRINT sørger for udskrift. Datasættet er vist i Udskrift 3.5.4. På tilsvarende vis kan man få datasæt, der indeholder andre af de udskriftsstørrelser, der er nævnt tidligere. NOPRINT i linien med PROC MEANS medfører at resultaterne af PROC MEANS ikke bliver udskrevet. Bemærk, at man kun kan bruge PROC MEANS på numeriske variable. Det følgende eksempel viser, hvorledes man bruger PROC MEANS til at beregne gennemsnit etc. for grupperede data. Datasættet er målinger af højden på indkaldte til forårssessionen 1984. Observationerne er grupperet i intervaller af længden 5. I datasættet session er hojde intervalmidtpunktet og antal angiver, hvor mange observationer, der falder i intervallet. Beregning af gennemsnit, empirisk varians, etc. kan her udføres ved at bruge ordren FREQ antal sammen med PROC MEANS, som vist nedenfor. Eks. 3.5.5. Brug af PROC MEANS til beregning af gennemsnit etc. for grupperede data. DATA session; INPUT hojde antal; CARDS; 157.5 27 162.5 117 167.5 664 172.5 2030 177.5 3571 182.5 3563 187.5 1877 192.5 651 197.5 134 202.5 27 ; PROC MEANS DATA=session; VAR hojde; FREQ antal; I beregningerne indgår hver observation nu et antal gange svarende til værdien af variablen antal. Se Udskrift 3.5.5. 3.6 PROC FREQ Ønsker man at tabellere sit SAS-datasæt kan man bruge PROC FREQ, der kan lave en- eller ersidede tabeller.

3.6 PROC FREQ 25 Eks. 3.6.1. Ensidet tabel (en variabel) ved PROC FREQ. PROC FREQ DATA=karakter; TABLES karakter; Resultatet er vist i Udskrift 3.6.1. Skal man tabellere mere end en variabel kan man skrives f. eks. TABLES karakter niveau. Herved får man tabelleret karakter og niveau hver for sig. Udelader man TABLESordren tabelleres alle de variable. Eks. 3.6.2. Tosidet tabel (to variable) ved PROC FREQ. PROC FREQ DATA=karakter; TABLES niveau*fag; Dette giver Udskrift 3.6.2. Man ser, at tabellerne i hver celle indeholder antal, procenter, række- og søjleprocenter. Hvis der er nogle af disse oplysninger man ikke ønsker kan man angive dette i linien med kommandoen TABLES, som vist i eksempel 3.6.3, hvor alle tre procentangivelser er udeladt. Her og i nogle af de følgende eksempler er anvendt SAS-datasættet klinik.data baseret på tallene i Bilag 1, hvor der er givet 100 sammenhørende observationer af alder, køn, systolisk blodtryk og diagnose. Disse vil i det følgende blive opfattet som re SAS-variable alder, sex, tryk og diag liggende i klinik.data. Eks. 3.6.3. Tosidet tabel (to variable) uden procentangivelser. PROC FREQ DATA=klinik.data; TABLES sex*diag/ NOPERCENT NOROW NOCOL ; Det er muligt at få udregnet teststørrelser for uafhængighedstest i tabeller med to variable, som vist i eksempel 3.6.4. Kommandoen EXPECTED bevirker, at den forventede værdi under hypotesen om uafhængighed, altså xr.x.s x.., skrives sammen med den observerede værdi i tabellen. CELLCHI2 bevirker, at størrelsen (x rs xr.x.s x.. ) 2 / xr.x.s x.. skrives i tabellen, mens CHISQ giver teststørrelser og testsandsynligheder. I udskriften er DF antal frihedsgrader, Value er værdien af teststørrelsen og Prob angiver testsandsynligheden. Chi-Square er Pearsonteststørrelsen og Likelihood Ratio Chi-Square er 2 log Q. Resultatet er vist i Udskrift 3.6.4. De sidste linier i tabellen er værdier for andre teststørrel-

26 SAS-procedurer ser og Warning: viser at celleantallene ikke er store nok til at bruge de asymptotiske test.

3.6 PROC FREQ 27 Eks. 3.6.4. Uafhængighedstest i tosidet tabel ved PROC FREQ. PROC FREQ DATA=klinik.data; TABLES sex*diag/ EXPECTED CELLCHI2 CHISQ NOPERCENT NOROW NOCOL; Det er muligt at indlæse resultaterne af en kørsel med PROC FREQ i et nyt datasæt, som vist i følgende eksempel. Eks. 3.6.5. Konstruktion af datasæt med PROC FREQ. PROC FREQ DATA=klinik.data; TABLES diag/ OUT=tabel NOPRINT; PROC PRINT DATA=tabel; Der er nu oprettet et nyt datasæt med navnet tabel. Det indeholder variablene diag, count og percent. Observationerne i datasættet angiver værdier for diag, antal gange den pågældende værdi forekommer (count) og den relative hyppighed af den pågældende værdi (percent). Datasættet er vist i Udskrift 3.6.5. Ordren NOPRINT medfører, at selve tabellen ikke udskrives. Sammen med PROC FREQ kan man bruge ordren WEIGHT variabelnavn; Alle observationer vil da indgå i tabellen med en vægt svarende til værdien af den pågældende variabel. Dette bruges for eksempel, når data er givet i tabelform. Eks. 3.6.6. PROC FREQ med vægtvariabel WEIGHT. PROC FREQ DATA=session; TABLES hojde; WEIGHT antal; I udskrifterne fra PROC FREQ ordnes tabellens rækker og søjler efter voksende variabelværdier. Ønsker man at beholde den oprindelige rækkefølge skrives ORDER=DATA i linien med PROC FREQ, som vist det følgende eksempel. Eks. 3.6.7. Tabel med PROC FREQ og ORDER=DATA.

28 SAS-procedurer PROC FREQ DATA=karakter ORDER=DATA; TABLES karakter; Hvis en variabel har mange værdier kan det være nødvendigt at gruppere den, før man bruger FREQ. Dette kan f. eks. gøres med ROUND eller med IF...THEN som i det næste eksempel.

3.7 PROC UNIVARIATE 29 Eks. 3.6.8. Gruppering før anvendelse af PROC FREQ. DATA temp; SET klinik.data; nyalder=20*round(alder/20); IF diag=1 OR diag=2 THEN nydiag='let'; ELSE nydiag='alvorlig'; PROC FREQ DATA=temp; TABLES nydiag*nyalder/nopercent NOROW NOCOL ; Her er variablen alder slået sammen i grupper af længde 20 og niveau 1 og 2 hhv 3 og 4 er slået sammen i variablen diag. Ønsker man at tabellere to variable for hver værdi af en tredie variabel kan man enten sortere og bruge BY eller skrive følgende program Eks. 3.6.9. Tabellering af tre variable. DATA temp; SET klinik.data; nyalder=20*round(alder/20); IF diag=1 OR diag=2 THEN nydiag='let'; ELSE nydiag='alvorlig'; PROC FREQ DATA=temp; TABLES sex*nydiag*nyalder/nopercent NOROW NOCOL; Her får man en krydstabellering af nydiag*nyalder for hver værdi af sex. Se udskrift 3.6.9. Tilføjes CHISQ fås uafhængighedstest i hver af tabellerne. 3.7 PROC UNIVARIATE Median og fraktiler for et datasæt kan ikke ndes med PROC MEANS. Her kan man i stedet bruge PROC UNIVARIATE. Denne procedure beregner de samme størrelser som PROC MEANS samt 1%, 5%, 10%, 25%, 50%, 75%, 90%, 95%, 99%-fraktil (og en hel del ekstra). Betegnelserne er de samme som i PROC MEANS, mens de nævnte fraktiler hedder P1, P5, P10,

30 SAS-procedurer Q1, MED, Q3, P90, P95, P99. I eksempel 3.7.1 er PROC UNIVARIATE anvendt på datasættet klinik.data i bilag 1.

3.8 PROC CORR 31 Eks. 3.7.1. Beregning af fraktiler med PROC UNIVARIATE. PROC UNIVARIATE DATA=klinik.data; VAR tryk; For kun at få udskrevet de størrelser man har brug for, anvendes PROC UNIVARIATE oftest med et OUTPUT statement som vist nedenfor. Eks. 3.7.2. Konstruktion af datasæt med PROC UNIVARIATE. PROC UNIVARIATE DATA=klinik.data NOPRINT; VAR tryk; OUTPUT OUT=d MEAN=mean MEDIAN=median STD=std Q1=q1 Q3=q3 QRANGE=qrange; PROC PRINT DATA=d; Det nye datasæt hedder d og indeholder de variable mean (gennemsnit), median (empirisk median), std (empirisk standardafvigelse), q1 (empirisk 25%-fraktil), q3 (empirisk 75%-fraktil) og qrange (dierensen mellem 75%-fraktilen og 25%-fraktilen). Man kan selvfølgelig også vælge andre af de størrelser, som PROC UNIVARIATE beregner. OUTPUT anvendes specielt sammen med BY, hvorved man får et datasæt med ovennævnte variabelværdier for hver værdi af BYvariablen. 3.8 PROC CORR For at nde den empiriske korrelationskoecient kan man bruge proceduren PROC CORR. Den beregner størrelserne N MEAN STD SUM MIN og MAX, der er deneret i PROC MEANS, samt empirisk korrelationskoecient for alle par af variable medtaget i VARordren. Samtidig angives testsandsynlighed for test af hypotesen ρ = 0 under antagelse af normalfordeling, hvor ρ er korrelationskoecienten for variabelparret. I udskriften fra eksempel 3.8.1, hvor PROC CORR er anvendt på klinik.data, er de to størrelser betegnet med henholdsvis (1*) og (2*). Sammen med PROC CORR bruger man ofte PROC GPLOT til at tegne de variable mod hinanden (se afsnit 4.3). Eks. 3.8.1. Beregning med PROC CORR. PROC CORR DATA=klinik.data; VAR tryk alder;

32 SAS-procedurer 3.9 SAS-programmer Et SAS-program består DATA-trin og PROC-trin. Man skal afslutte et DATA-trin, før man går i gang med det tilsvarende PROC-trin. Man må altså ikke begynde at lave om på data midt i en procedure. Når proceduren så er afsluttet, kan man godt påbegynde et nyt DATA-trin i det samme program. For at holde orden i et program, kan det være nyttigt at skrive kommentarer i selve programmet. Hvis man indeslutter dem i /* */ læser SAS ikke kommentarerne. Et SAS-program vil således typisk se ud som i det følgende eksempel. Eks. 3.9.1. SAS-program med ere DATA-trin og PROC-trin. DATA nykar; /* Udvælgelse af */ SET karakter; /* observationer */ IF karakter > 8 THEN DELETE; PROC FREQ DATA=nykar; /* Tabellering */ TABLES niveau*karakter; RUN; DATA nykar; SET karakter; k=10*karakter+6; PROC MEANS DATA=nykar; /* Beregning af */ VAR k; /* gennemsnit */ OUTPUT OUT=d MEAN=gns; RUN; DATA dny; SET d; PROC FREQ DATA=dny; /* Tabellering */ TABLES gns; RUN; 3.10 Udskrifter UDSKRIFT 3.3.1: CONTENTS PROCEDURE Data Set Name: WORK.KARAKTER Type: Observations: 8 Record Len: 28 Variables: 3 -----Alphabetic List of Variables and Attributes-----

3.10 Udskrifter 33 # Variable Type Len Pos Label 1 FAG Char 8 4 3 KARAKTER Num 8 20 2 NIVEAU Char 8 12 UDSKRIFT 3.5.1: Analysis Variable : KARAKTER N Obs N Minimum Maximum Mean Std Dev ---------------------------------------------------------------- 8 8 5.0000000 13.0000000 8.2500000 2.4928469 ---------------------------------------------------------------- UDSKRIFT 3.5.3: Analysis Variable : KARAKTER UDSKRIFT 3.5.4: ------------------ NIVEAU=h ----------------- N Obs N Sum Mean ------------------------------------ 5 5 44.0000000 8.8000000 ------------------------------------ ------------------ NIVEAU=m ----------------- N Obs N Sum Mean ------------------------------------ 2 2 14.0000000 7.0000000 ------------------------------------ ----------------- NIVEAU=o ----------------- N Obs N Sum Mean ------------------------------------ 1 1 8.0000000 8.0000000 ------------------------------------

34 SAS-procedurer Analysis Variable : KARAKTER OBS NIVEAU _TYPE FREQ_ N TOTAL 1 h 0 5 5 44 2 m 0 2 2 14 3 o 0 1 1 8 UDSKRIFT 3.5.5: Analysis Variable : HOJDE N Obs N Minimum Maximum Mean Std Dev ---------------------------------------------------------------- 12661 12661 157.500 202.500 179.918 6.73316 ---------------------------------------------------------------- UDSKRIFT 3.6.1: Cumulative Cumulative KARAKTER Frequency Percent Frequency Percent ------------------------------------------------------ 5 1 12.5 1 12.5 6 1 12.5 2 25.0 7 1 12.5 3 37.5 8 2 25.0 5 62.5 9 1 12.5 6 75.0 10 1 12.5 7 87.5 13 1 12.5 8 100.0 UDSKRIFT 3.6.2:

3.10 Udskrifter 35 TABLE OF NIVEAU BY FAG NIVEAU FAG Frequency Percent Row Pct Col Pct eng kem mat mus samf Total ---------+--------+--------+--------+--------+--------+ h 1 0 2 1 1 5 12.50 0.00 25.00 12.50 12.50 62.50 20.00 0.00 40.00 20.00 20.00 100.00 0.00 66.67 100.00 50.00 ---------+--------+--------+--------+--------+--------+ m 0 0 1 0 1 2 0.00 0.00 12.50 0.00 12.50 25.00 0.00 0.00 50.00 0.00 50.00 0.00 0.00 33.33 0.00 50.00 ---------+--------+--------+--------+--------+--------+ o 0 1 0 0 0 1 0.00 12.50 0.00 0.00 0.00 12.50 0.00 100.00 0.00 0.00 0.00 0.00 100.00 0.00 0.00 0.00 ---------+--------+--------+--------+--------+--------+ Total 1 1 3 1 2 8 12.50 12.50 37.50 12.50 25.00 100.00 UDSKRIFT 3.6.3: TABLE OF SEX BY DIAG SEX DIAG Frequency 1 2 3 4 Total ---------+--------+--------+--------+--------+ kvinde 2 12 6 4 24 ---------+--------+--------+--------+--------+

36 SAS-procedurer mand 5 39 26 6 76 ---------+--------+--------+--------+--------+ Total 7 51 32 10 100 UDSKRIFT 3.6.4 (redigeret): TABLE OF SEX BY DIAG SEX DIAG Frequency Expected Cell Chi-Square 1 2 3 4 Total ---------------+--------+--------+--------+--------+ kvinde 2 12 6 4 24 1.68 12.24 7.68 2.4 0.061 0.0047 0.3675 1.0667 ---------------+--------+--------+--------+--------+ mand 5 39 26 6 76 5.32 38.76 24.32 7.6 0.0192 0.0015 0.1161 0.3368 ---------------+--------+--------+--------+--------+ Total 7 51 32 10 100 STATISTICS FOR TABLE OF SEX BY DIAG Statistic DF Value Prob ------------------------------------------------------ Chi-Square 3 1.973 0.578 Likelihood Ratio Chi-Square 3 1.844 0.605 Sample Size = 100 WARNING: 25% of the cells have expected counts less than 5. Chi-Square may not be a valid test. UDSKRIFT 3.6.5:

3.10 Udskrifter 37 UDSKRIFT 3.6.6: OBS DIAG COUNT PERCENT 1 1 7 7 2 2 51 51 3 3 32 32 4 4 10 10 Cumulative Cumulative HOJDE Frequency Percent Frequency Percent --------------------------------------------------- 157.5 27 0.2 27 0.2 162.5 117 0.9 144 1.1 167.5 664 5.2 808 6.4 172.5 2030 16.0 2838 22.4 177.5 3571 28.2 6409 50.6 182.5 3563 28.1 9972 78.8 187.5 1877 14.8 11849 93.6 192.5 651 5.1 12500 98.7 197.5 134 1.1 12634 99.8 202.5 27 0.2 12661 100.0 UDSKRIFT 3.6.7: Cumulative Cumulative KARAKTER Frequency Percent Frequency Percent ------------------------------------------------------ 13 1 12.5 1 12.5 10 1 12.5 2 25.0 9 1 12.5 3 37.5 7 1 12.5 4 50.0 5 1 12.5 5 62.5 8 2 25.0 7 87.5 6 1 12.5 8 100.0

38 SAS-procedurer UDSKRIFT 3.7.1: Variable=T UNIVARIATE PROCEDURE Moments N 100 Sum Wgts 100 Mean 121.01 Sum 12101 Std Dev 17.99074 Variance 323.6666 Skewness 0.69531 Kurtosis 0.572536 USS 1496385 CSS 32042.99 CV 14.86715 Std Mean 1.799074 T:Mean=0 67.2624 Prob> T 0.0001 Sgn Rank 2525 Prob> S 0.0001 Num ^= 0 100 Quantiles(Def=5) 100% Max 172 99% 171 75% Q3 130 95% 155 50% Med 120 90% 149.5 25% Q1 110 10% 100 0% Min 85 5% 94 1% 87.5 Range 87 Q3-Q1 20 Mode 120 Extremes Lowest Obs Highest Obs

3.10 Udskrifter 39 85( 52) 160( 64) 90( 27) 160( 78) 90( 24) 170( 20) 92( 65) 170( 44) 92( 28) 172( 90) UDSKRIFT 3.7.2: OBS MEAN STD Q1 MEDIAN Q3 QRANGE 1 121.01 17.9907 110 120 130 20 UDSKRIFT 3.8.1: CORRELATION ANALYSIS 2 'VAR' Variables: T ALDER Simple Statistics Variable N Mean Std Dev Sum Minimum Maximum T 100 121.0 17.9907 12101.0 85.0000 172.0 ALDER 100 52.2300 10.8589 5223.0 22.0000 77.0000 Pearson Correlation Coefficients / Prob > R under Ho: Rho=0 / N = 100 T ALDER T 1.00000 (1*) 0.24926 0.0 (2*) 0.0124

40 SAS-procedurer ALDER 0.24926 1.00000 0.0124 0.0

Kapitel 4 Grak i SAS 4.1 Indledning SAS har et specielt grakmodul SAS-GRAPH. Procedurerne i dette er forsynet med forskellige muligheder for at styre udskrifterne, således at man kan 'skræddersy' sine tegninger. Dette kapitel indeholder de almindeligste udskriftsdirigerende sætninger i de to graske procedurer PROC GCHART og PROC GPLOT. Yderligere oplysninger ndes i SAS/GRAPH User's Guide. Gennemgangen er baseret på eksempler. Data til eksemplerne ndes i datasættet 'klinik.data', hvor der er givet 100 sammenhørende observationer af alder, køn, systolisk blodtryk og diagnose. Disse vil i det følgende blive opfattet som re SAS-variable alder, sex, tryk og diag liggende i et SAS-datasæt klinik.data. Overskrifter og valg af skrifttyper gennemgås i afsnit 4.4. Diagrammer og plot ndes i særskilte bilag. 4.2 PROC GCHART Søjlediagrammer kan benyttes til at give indtryk af datamaterialers fordelinger. PROC GCHART kan bl. a. konstruere søjlediagrammer med vandrette eller lodrette søjler. Eks. 4.2.1. Søjlediagram for SEX med lodrette (vertikale) søjler. PROC GCHART DATA=klinik.data;

42 Grak i SAS VBAR sex/frame; For hver værdi af SEX tegner programmet en søjle. Højden på søjlen angiver, hvor mange gange den pågældende værdi forekommer i datamaterialet. Ordren FRAME medfører, at tegningen bliver indrammet. Eks. 4.2.2. Søjlediagram for DIAG med vandrette (horisontale) søjler. PROC GCHART DATA=klinik.data; HBAR diag/frame DISCRETE; Ordren HBAR giver vandrette(horisontale) søjler. Ordren DISCRETE i dette program fortæller SAS, at variablen DIAG skal opfattes som en diskret variabel, som man ikke ønsker, at programmet skal begynde at gruppere, selv om den evt. har numeriske værdier. Udelades DISCRETE risikerer man, at SAS slår grupper sammen. DISCRETE kan også bruges med VBAR. I SAS/GRAPH User's Guide er der yderligere oplysninger om den graske tilrettelæggelse. Hvis man skal sammenligne forskellige gruppers fordeling, er det en fordel, at lade højden på søjlerne angive gruppens procentandel i stedet for antallet. Dette gøres med ordren TYPE=PERCENT. Man kan endvidere selv bestemme, hvordan akserne skal være med de to ordrer RAXIS og MIDPOINTS. På den måde kan man f. eks. sikre, at ere diagrammer får samme skala. Ordren BY kan bruges i de este grakprogrammer. Derved får man en tegning for hver værdier af BYvariablen. Der skal som sædvanligt sorteres før man bruger BY. Eks. 4.2.3. Søjlediagram for ALDER opdelt efter SEX med specicerede akser. PROC SORT DATA=klinik.data; BY sex; PROC GCHART; VBAR alder/frame TYPE=PERCENT SPACE=0 RAXIS=0 TO 55 BY 5 MIDPOINTS=15 TO 75 BY 10; BY sex; Ovenstående program resulterer i et søjlediagram af variablen ALDER for

4.2 PROC GCHART 43 hver værdi af variablen SEX. y-aksen's maksimum bliver 55 (RAXIS = responsaxis) og intervalinddelingen på x-aksen bliver fra 10 til 80 i skridt af længde 10(givet ved MIDPOINTS, der også kan have formen MIDPOINTS=20 40 50 70). Bemærk, at selv om intervallerne ikke er lige lange, så angiver højden stadig den procentvise andel der falder i intervallet. Når man selv specicerer sine akser, skal man i øvrigt passe på, at man får plads til alle dele af tegningen. SAS smider det væk, der ligger uden for de specicerede akser. Sker det, angives det i log-len, som man bl. a. af den grund altid bør læse. I udskriften har vi sat afstanden mellem søjlerne til 0 ved ordren SPACE. Dette bruges f. eks. når man skal tegne histogrammer. PROC GCHART kan også tegne kumulerede fordelinger, således at søjlernes højde angiver det totale antal observationer der er mindre end eller lig med værdien. Dette gøres ved at specicere TYPE=SUM, der giver kumulerede antal, eller TYPE=CPERCENT, der giver kumulerede procenter. Eks. 4.2.4. Kumuleret fordeling for ALDER. PROC GCHART DATA=klinik.data; VBAR alder/frame TYPE=CPERCENT SPACE=0 MIDPOINTS=15 TO 75 BY 10; Endvidere kan PROC GCHART lave lagkagediagrammer ved ordren PIE Eks. 4.2.5. Lagkagediagram for DIAG. PROC GCHART DATA=klinik.data; PIE diag/discrete TYPE=PERCENT; Man kan man få afbildet to eller ere grupper i samme diagram ved ordren GROUP, der sørger for at der bliver lavet et søjlediagram for hver værdi af den variabel, der speciceres ved GROUP. Eks. 4.2.6. Søjlediagram for DIAG med GROUP=SEX. PROC GCHART DATA=klinik.data; VBAR diag/frame DISCRETE TYPE=PERCENT G100 GROUP=sex PATTERNID=group;

44 Grak i SAS Skriver man som her TYPE=PERCENT og G100 vil summen af søjlerne være 100% for hver værdi af GROUPvariablen. Udelades G100 bliver summen af alle søjlerne 100%. Udelades også TYPE=PERCENT vil hver søjle indeholde antallet af observationer i den pågældende gruppe. PATTERNID=group medfører, at de to diagrammer får hver sit mønster. Bruger man i stedet ordren bliver hver søjle opdelt efter den variabel der speciceres ved SUBGROUP. Eks. 4.2.7. Søjlediagram for DIAG med SUBGROUP=SEX. PROC GCHART DATA=klinik.data; VBAR diag/frame DISCRETE TYPE=PERCENT SUBGROUP=sex; Endelig kan man kombinere GROUP og SUBGROUP. Eks. 4.2.8. Søjlediagram for ALDER med GROUP=SEX og SUBGROUP=DIAG. PROC GCHART DATA=klinik.data; VBAR alder/frame TYPE=PERCENT RAXIS=0 TO 55 BY 5 MIDPOINTS=15 TO 75 BY 10 GROUP=sex SUBGROUP=diag G100; 4.3 PROC GPLOT Ønsker man at afsætte to variable mod hinanden i et koordinatsystem, kan man benytte proceduren PROC GPLOT. Dette er en eksibel procedure, der indeholder mange gode og nyttige udskriftsdirigerende ordrer, hvoraf nogle få gennemgås i det følgende. PROC GPLOT består essentielt af to dele: plotordrer og symbolordrer. En PLOTordre har formen PROC GPLOT; PLOT y*x;

4.3 PROC GPLOT 45 og fortæller, hvilke variable, der skal tegnes op mod hinanden (y-variablen skal stå først). Eks. 4.3.1. Tegning af tryk mod alder med PROC GPLOT. PROC GPLOT DATA=klinik.data; PLOT tryk*alder/frame; Vil man have forskellige symboler for punkter, der svarer til f. eks. mænd og kvinder, angiver man den tilsvarende variabel som plottesymbol. Eks. 4.3.2. Tegning af tryk mod alder med sex som plottesymbol. PROC GPLOT DATA=klinik.data; PLOT tryk*alder=sex/frame; Man kan selv skalere akserne ved at bruge ordrerne HAXIS (for den vandrette akse) og VAXIS (for den lodrette akse). Dette er især nyttigt, hvis man vil sammenligne ere plot, fordi man da kan få samme skala på tegningerne. Eks. 4.3.3. Skalering af akser ved HAXIS og VAXIS. PROC SORT DATA=klinik.data; BY sex; PROC GPLOT; PLOT tryk*alder/frame HAXIS=20 TO 80 BY 10 VAXIS=80 TO 180 BY 10; BY SEX; Skalerer man selv akserne, skal man sørge for at få alle observationer med. SAS smider også her de observationer væk, der ligger uden for det angivne område (dog med advarsel i log-len). Man kan få mere avancerede plot ved brug af SYMBOLordrer, der fortæller, hvad der skal ske med punkterne og ind imellem punkterne. Disse ordrer indeholder beskrivelse af farver, plottesymboler liniesignaturer og interpolationsmåder, der angives med C (= colour), V (= value), L (= line) og I (= interpolation). Skriver man ingenting vælger maskinen selv. Betydningen af farve og plottesymbol giver sig selv. Interpolationsmåde angiver om punkterne skal være isolerede; om de skal forbindes med rette linier eller med udjævnede kurver; om der skal tilpasses rette linier eller