Statistisk databehandling ht 1994

Demonstration 3: SAS

MATEMATISKA INSTITUTIONEN

Chalmers Tekniska Högskola Göteborgs Universitet 412 96 Göteborg

1 Statistik och datorer

Att sätta sig in i hur olika statistiska metoder fungerar är en sak. Att tillämpa dessa metoder på verkliga data ställer till problem av en helt annan karaktär. Långa och komplicerade beräkningar kan behöva göras och man måste välja mellan olika approximationsmetoder baserade på olika numeriska algoritmer. Användning av miniräknare kan underlätta men datorer kan göra mycket mer. Datorn är ett mycket flexibelt verktyg som kan programmeras att utföra komplicerade beräkningar och fatta logiska beslut samt presentera resultaten i en begriplig form. Detta sker genom att man skriver program bestående av ett antal steg med instruktioner man vill att datorn skall utföra. Programmen skrivs i speciella språk som datorn förstår. Exempel på sådana språk är Basic, Pascal, Ada, Fortran, osv. Varje språk har sitt eget ordförråd och sin egen grammatik.

Numera behöver man inte vara programmeringsexpert för att kunna utnyttja datorn effektivt. Man kan istället använda färdiga programpaket bestående av en samling användarvänliga program avsedda att utnyttjas för något speciellt ändamål, t.ex. statistisk analys. Statistiska programpaket kan vara ganska speciella och avse att tillmötesgå behoven hos en särskild kategori användare som t.ex. medicinare, men det finns även statistiska paket som vänder sig till en bredare publik. Ett av de mest kända i den senare kategorin är SAS (Statistical Analysis System) som funnits länge för stordatorer men som sedan 1988 också är tillgängligt i persondatormiljö och då kallas PC-SAS.

Andra exempel på statistiska programpaket är spssx, minitab och statgraphics. Det sistnämnda är menybaserat vilket innebär att användaren stegvis erbjuds listor med möjliga instruktioner att välja bland. Minitab är kommandobaserat och kräver att användaren själv anger vilka instruktioner hon/han vill att datorn skall utföra. PC-SAS kan användas på båda sätten. Olika programpaket kan skilja sig åt på en rad andra sätt även om de initialt kan synas ganska lika. Ofta är t.ex. en och samma statistiska procedur implementerad på olika sätt. Mer om olika programpaket kan du läsa i följande referenser.

1. M. L. Berenson, D. M. Levin & M. Goldstein (1983) Intermediate Statistical Methods: A computer Package Approach. Prentice-Hall

2. W. A. Woodward & A. C. Ellio (1985)

Directory of Statistical Microcomputer Software.

Marcel-Dekker, New York

Till slut en varning: Datorn är ett flexibelt verktyg som gör att man kan ägna sig åt statistisk analys av data snabbt och effektivt. Men dess användning förutsätter ett visst förarbete i form av förståelse för de observationer man vill studera och de statistiska procedurer man vill använda.

2 Start av PC-SAS

PC-SAS är ett programpaket som innehåller allehanda typer av program som kan behövas för analys av forsknings- och utredningsdata. Bl.a. erbjudes möjlighet att läsa in, redigera och sortera data i olika former. Det går att utföra avancerade statistiska undersökningar såsom överlevnadsanalys och diverse multivariata metoder. Man kan även skriva egna programrutiner där olika statistiska och matematiska funktioner anropas. Vidare kan resultat presenteras bl.a. mha. avancerade grafiska rutiner.

Att starta PC-SAS är enkelt. När du sätter på datorn visar den en DOS-prompt i stil med

D:\ >

Skriv sas och tryck på Enter . Efter en stund visar din terminal följande bild:

=== OUTPUT =========================== ∥Command ===> ∥ ∥ ∥ === LOG ============================== ∥Command ===> ∥ … ∥ NOTE: … ∥ ∥ === PROGRAM EDITOR =================== ∥Command ===> ∥ ∥00001 ∥00002 ∥00003 ∥ … ======================================

Det du ser på skärmen är PC-SAS tre vanligaste fönster: Programfönstret, logfönstret och outputfönstret. I programfönstret skriver du dina SAS-program, i outputfönstret visas resultaten av dina programkörningar och i logfönstret skrivs ditt program ut tillsammans med diverse kommentarer och eventuella felmeddelanden.

För att flytta markören mellan fönstren använder du F5 -tangenten. Varje fönster har dessutom en speciell tangent. Om du vill bekanta dig med tangentbordet kan du, oavsett var du befinner dig, ställa markören i positionen efter Command ===> genom att trycka på 7 Home -tangenten och skriva keys följt av Enter . Skärmen visar nu en lista med tangenter jämte kortfattade förklaringar. Listan är lång och hela ryms ej på skärmen. Du kan använda Page Up och Page Down för att flytta dig upp och ner i listan. Här och i andra sammanhang återvänder man till bilden med de tre fönstren genom att trycka på F10 (en två eller fler gånger beroende på utgångsläget). Hela tiden (oavsett utgångsläget) kan man trycka på F1 för att få förklaringar ur ett speciellt hjälpfönster. F7 är en ZOOM-tangent; pröva själv.

Om du av någon anledning vill lämna SAS tillfälligt och återvända till datorns hårddisk trycker du först på 7 Home för att ställa markören efter Command ===> och skriver sedan x (följt av Enter ). Din skärm visar nu DOS-prompten D:\ > (eller liknande). Du kan återvända till PC-SAS genom att skriva exit (följt av vagnretur). För att avsluta en SAS-körning flyttar du markören till positionen efter Command ===> och skriver bye eller endsas.

3 SAS Program

För att kunna göra intressanta saker med SAS måste du lära dig grunderna för hur man skriver SAS-Program. Sådana program skrivs i programfönstret dit du nu bör flytta markören. Ett SAS-program består väsentligen av två steg: Ett datasteg och ett procedursteg. Båda stegen består av ett antal SAS-satser. Slutet av en sats markeras med ett semikolon “;”.

Datasteget och procedursteget utför delar av det speciella SAS-språket. I datasteget läser man in de indata som man avser att analysera till en s.k. SAS-datamängd. Varje SAS-datamängd har ett särskilt namn som du väljer själv. I procedursteget sker själva bearbetningen av data genom att man anropar en eller flera procedurer. Man kan i detta steg ange en detaljerad beskrivning av hur man önskar att bearbetningen skall utföras. Vilka procedurer som finns tillgängliga ser du bäst genom att bläddra i manualen eller genom att trycka på hjälptangenten F1 . Exempel på procedurer är proc print, proc freq, proc reg och proc plot. Fler exempel på procedurer ges i avsnitt 4.

3.1 Datasteget

Grundregeln i PC-SAS är att varje sats avslutas med ett semikolon. Det vanligaste felet i SAS-program är att man glömt avsluta någon sats med det obligatoriska “;”.

Ett datasteg i ett enkelt SAS-program kan se ut på följande sätt:

00001 data siffror; 00002 input s; 00003 cards; 00004 1.2 00005 2.3 00006 1.5 00007 3.7 00008 ;

Detta datasteg skapar en SAS-datamängd med namnet siffror som innehåller en enda variabel s. Variabeln s antar de värden som finns i indatas första kolumn (SAS-läser indata kolumnvis). Satsen cards på rad 3 instruerar datorn om att observationerna av variabeln s följer efter denna sats. Raderna 4-7 avslutas ej med semikolon eftersom de ej är SASsatser. Semikolonet på rad 8 markerar slutet på indata. Notera att semikolonets funktion gör uppdelningen av programmets satser i rader överflödig. Vi kunde lika gärna ha ersatt raderna 1-3 med den enda raden

00001 data siffror; input s; cards;

Vi kunke även ha ersatt raderna 1-3 med

00001 DATA SIFFROR; 00002 INPUT S; 00003 CARDS;

Det har mao. ingen betydelse om vi använder stora eller små bokstäver, och man kan fylla i med mellanslag för att göra program mera läsbara (vilket brukar kallas att strukturera programmet).

I allmänhet börjar datasteget med att skapa en SAS-datamängd genom en sats av formen data namn;. Inputsatsen innebär att man bestämmer namnen på de ingående variablerna och talar om i vilken ordning de är uppräknade. T.ex. indikerar inputsatsen

input s t u v;

att man ämnar arbeta med fyra variabler och då består indata av fyra kolumner.

Ett variabelnamn behöver inte bestå av en enda bokstav utan kan vara vilken som helst kombination av högst åtta bokstäver och siffror. Variablerna kan vara numeriska eller teckenvariabler. Om man vill understryka vilken typ det gäller kan man använda symbolen $ för teckenvariabler och symbolen @@ för numeriska variabler. Om vi t.ex. har fyra variabler s, t, u och v och om s och t är teckenvariabler medan u och v är numeriska blir vår inputsats

input s $ t $ u v @@;

Mot dessa variabler svarar indata bestående av fyra kolumner varav de två sista är siffror. Exempel på sådana indata är

s  t  u  v
HANE BRUN 2.3 10.1
HANE GRÅ 4.7 8.2
HONA GUL 2.8 7.4
HANE BRUN 4.2 9.5
HONA GUL 5.2 12.4

I datasteget kan man ändra indata på olika sätt. Om vi t.ex. önskar använda logaritmerna av observationerna av variabeln v skriver vi

input s $ t $ u v @@; v=log(v);

I stället för att mata in indata “för hand” såsom ovan kan man gå tillväga på andra sätt. Ibland har vi våra indata på en separat fil antingen på hårddisken eller på skiva. Om denna fil heter sample och har två kolumner med data blir datasteget (t.ex.)

data siffror; infile ’sample’; input s t;

Nyckelordet infile talar om för datorn var indata skall hämtas. Ett annat sätt är att skriva en rutin för att skapar indata. I följande exempel skapas indata genom att vi simulerar 100 observationer av en normalfördelad stokastisk variabel med väntevärdet 0 och variansen 1.

data siffror; for n=1 to 100; s=normal (35739);

3.2 Procedursteget

Antag att vårt datasteg har utseendet

00001 data siffror; 00001 input s $ t $ u v @@; 00003 cards; 00004 hane brun 2.3 10.1 00005 hane grå 4.7 8.2 00006 hona gul 2.8 7.4 00007 hane brun 4.2 9.5 00008 hona gul 5.1 12.4 00009 ;

Detta steg skapar SAS-datafilen siffror som innehåller fyra variabler med värden enligt kolumnerna ovan. För att göra någonting med denna datamängd måste vi komplettera vårt program med ett eller flera procedursteg. Här utföres statistiska analyser av data i SAS-datamängder. Man kan också skapa nya SAS-datamängder. Vi börjar med att öva på den enkla proceduren proc print. Ovanstående program kompletteras därför med raderna

00010 proc print data=siffror; 00011 var s u; 00012 run;

Tryck sedan på F10 , som användes när du har skrivit färdigt ditt program och vill exekvera det. Om du följt instruktionerna noga visar outputfönstret följande tabell

OBS S  U
1 hane 2.3
2 hane 4.7
3 hona 2.8
4 hane 4.2
5 hona 5.1

Om inte hela tabellen syns kan du flytta markören till outputfönstret med F5 och sedan trycka på F7 . (Zoom “stänges av” med F10 .) De körda raderna 1-12 finns nu i logfönstret och kan studeras genom att flytta dit (med F5 ). Låt oss ta en titt på raderna 10-12:

00010 proc print data=siffror; På denna rad instrueras datorn om vilken procedur vi vill utföra och på vilken SASdatamängd. I detta fall gäller det proceduren proc print som alltså skriver ut data.

00011 var s u;

Här instrueras datorn om vilka variabler ur SAS-datamängden som skall skriva ut. Det aktuella procedursteget avslutas därefter med SAS-satsen

00012 run;

För att rensa bort innehållet i de olika fönstren trycker du på Alt och E samtidigt. Då suddas innehållet i det fönster där markören finns ut. (Om detta ej fungerar är din Alt E -funktion ej definierad. Du kan då antingen utnyttja kommandot clear istället eller så definiera Alt E genom att gå till keys menyn, scrolla till raden “Alt E” och där skriva “clear”.) Du kan få fram ditt program igen efter att ha suddat bort det (eller efter att ha kört det) genom att flytta markören till programfönstret och trycka på F9 .

3.3 En övning

I denna övning skapas först en datamängd som kopieras till datorns hårddisk och sedan analyseras data i datamängden mha. proceduren proc means.

Börja med att rensa de olika fönstren och flytta markören till programfönstrets första rad. Skriv sedan ett visst antal (säg 14) tal, ett på varje rad. Flytta slutligen markören till positionen efter Command ===> och ge kommandot file ’a’. Datorn svarar då med “NOTE: 14 Line(s) saved”. Vidare har filen a bestående av en kolumn med 14 tal skapats på hårddisken.

OBS: Kommandot file ’filnamn’ kan alltid användas för att skriva ut innehållet i det fönster man befinner sig i till filen filnamn på hårddisken. Denna fil kan sedan t.ex. skrivas ut med DOS PRINT-kommando. Ett alternativt sätt att dokumentera SAS-dialogen är att använda datorns Print Screen -tangent.

Sudda nu bort innehållet i programfönstret och kör programmet

data d; infile ’a’; input x; proc means data=d; var x; run;

4 Några användbara procedurer

I detta avsnitt presenteras några SAS-procedurer som kan användas för att jämföra två eller flera grupper av data. Börja med att studera följande datasteg som vi kommer använda för att illustrera hur procedurerna fungerar. Öva därefter på de givna exemplen.

data blod; input aalder $ halt @@; cards; ung 2.34 ung 5.43 barn 4.47 aeldre 1.98 barn 2.76 aeldre 2.56 ung 2.65 ung 2.85 barn 2.53 barn 4.32 aeldre 4.72 aeldre 3.29 ;

Exempel 1: proc print.

proc print data=blod; run;

Exempel 2: proc chart. Följande procedur ger instruktion om att göra stapeldiagram för halt för varje klass för sig.

proc chart data=blod; vbar halt / group=aalder; run;

Exempel 3: proc means. Medelvärdet av halt i varje aaldersklass för sig fås med

proc means data=blod; by aalder; var halt; run; Exempel 4: proc sort. Följande procedur sorterar indata map. värdet av aalder.

proc sort data=blod; by aalder; run;

Exempel 5: proc anova. En variansanalys för test av likhet mellan väntevärdena för halt i de olika klasserna utföres med

proc anova data=blod; class aalder; model halt=aalder; run;

Man kan testa vilka klasser som skiljer sig åt mha. simultana uttalanden (dvs. flera uttalanden som gäller samtidigt med viss signifikansnivå). Det finns flera varianter (options); formen vald nedan means aalder / t utför t-test. Optionen t kan t.ex. bytas mot bon (bonferroni) eller regwf (pröva själv). Signifikansnivån styres enligt means aalder / t bon alpha=0.10. Notera att flera typer av jämförelser kan utföras samtidigt.

proc anova data=blod; class aalder; model halt=aalder; means aalder / t; run;

Exempel 6: proc npar1way. Kruskal-Wallis test av likhet för väntevärdena göres med

proc npar1way data=blod; class aalder; var halt; run;

Exempel 7: proc printto. Utskriften i logfönstret och outputfönstret kan styras om (“appended”) till filer på (t.ex.) hårddisken med

proc printto log=’log-filename’ print=’out-filename’; run;

För att få tillbaka utskriften till fönsterna gör man

proc printto log=log print=print; run;