Kort handledning i SAS



Relevanta dokument
Kort handledning i SAS

Datorlaboration 1 Deskriptiv statistik med hjälp av MS Excel vers. 2010

2. Lära sig skatta en multipel linjär regressionsmodell samt plotta variablerna. 4. Lära sig skatta en linjär regressionsmodell med interaktionstermer

Histogram, pivottabeller och tabell med beskrivande statistik i Excel

Målet för D1 är att studenterna ska kunna följande: Använda några av de vanligaste PROC:arna. Sammanställa och presentera data i tabeller och grafiskt

Datorlaboration 1 Deskriptiv statistik med hjälp av MS Excel

(a) Lära sig beräkna sannolikheter för binomial- och normalfördelade variabler (b) Lära sig presentera binomial- och normalfördelningen gra skt

Statistikens grunder 1 och 2, GN, 15 hp, deltid, kvällskurs

Använda några av de vanligaste PROC:arna. Sammanställa och presentera data i tabeller och grafiskt

1. Lära sig plotta en beroende variabel mot en oberoende variabel. 2. Lära sig skatta en enkel linjär regressionsmodell

Laboration 1 Introduktion till Visual Basic 6.0

4. Kunna orientera sig mellan de olika fönstren

Datainmatning TÄNKTA BETECKNINGAR. Variabelnamn/kolumnbeteckning, Dummyvärden, som matas in beroende på aktuellt svarsalternativ

Kort manual till SPSS 10.0 för Mac/PC

Datorövning 5. Statistisk teori med tillämpningar. Lära sig beräkna konfidensintervall och utföra hypotestest för:

Statistikens grunder 1 och 2, GN, 15 hp, deltid, kvällskurs

*****************************************************************************

Datorövning 5 Exponentiella modeller och elasticitetssamband

Laboration 2. i 5B1512, Grundkurs i matematisk statistik för ekonomer

Intro till SPSS Kimmo Sorjonen (0811)

Föreläsning 12: Regression

Datorövning 1 Enkel linjär regressionsanalys

Målet för D3 är att studenterna ska kunna följande: Dra slumptal från olika sannolikhetsfördelningar med hjälp av SAS

Idiotens guide till. Håkan Lyckeborgs SPSS-föreläsning 4/ Av: Markus Ederwall, 21488

DATORLABORATION: JÄMFÖRELSE AV FLERA STICKPROV.

Grundkurs 1 IKT Filhantering

Inledning till OpenOffice Calculator Datorlära 2 FK2005

Statistikens grunder 1 och 2, GN, 15 hp, deltid, kvällskurs

DATORÖVNING 6: CENTRALA GRÄNSVÄRDES-

Handledning för konstruktion av tabeller och diagram med Excel

Richard Öhrvall, 1

Datorövning 1 Calc i OpenOffice 1

STOCKHOLMS UNIVERSITET VT 2011 Avd. Matematisk statistik GB DATORLABORATION 3: MULTIPEL REGRESSION.

Matematikcentrum 1(6) Matematisk Statistik Lunds Universitet MASB11 - Biostatistisk grundkurs VT2014, lp3. Laboration 2. Fördelningar och simulering

En introduktion till och första övning for Excel

Matematikcentrum 1(7) Matematisk Statistik Lunds Universitet MASB11 - Biostatistisk grundkurs HT2007. Laboration. Simulering

1/23 REGRESSIONSANALYS. Statistiska institutionen, Stockholms universitet

1. Lära sig beräkna kon densintervall och täckningsgrad 2. Lära sig rita en exponentialfördelning 3. Lära sig illustrera centrala gränsvärdessatsen

1/31 REGRESSIONSANALYS. Statistiska institutionen, Stockholms universitet

2. Lära sig beskriva en variabel numeriskt med "proc univariate" 4. Lära sig rita diagram med avseende på en annan variabel

LABORATION 3 - Regressionsanalys

Grundkurs 2 IKT. Dan Haldin Ålands lyceum

Excel-guide. Introduktion

Gran Canaria - Arbetsbeskrivning knapplänkar (Mediator 8)

Matematikcentrum 1(7) Matematisk Statistik Lunds Universitet Per-Erik Isberg. Laboration 1. Simulering

BLI VÄN MED DIN DATOR ENHETER MAPPAR FILER

Målet för D2 är att studenterna ska kunna följande: Dra slumptal från olika sannolikhetsfördelningar med hjälp av SAS

Datorövning 1 Statistik med Excel (Office 2007, svenska)

Kom igång med Stata. Introduktion

Matematikcentrum 1(5) Matematisk Statistik Lunds Universitet MASB11 HT Laboration P3-P4. Statistiska test

DATORÖVNING 2: STATISTISK INFERENS.

Exempel på tentamensuppgifter

Datorövning 1 Statistik med Excel (Office 2010, svenska)

Matematikcentrum 1(4) Matematisk Statistik Lunds Universitet MASB11 HT10. Laboration. Regressionsanalys (Sambandsanalys)

Marknadsinformationsmetodik Inlämningsuppgift

Mathematica. Utdata är Mathematicas svar på dina kommandon. Här ser vi svaret på kommandot från. , x

Syfte Syftet med den här laborationen är att du ska lära dig använda några grundfunktioner i Microsoft Excel.

Matematikcentrum 1(6) Matematisk Statistik Lunds Universitet MASB11 HT11. Laboration. Statistiska test /16

FACIT (korrekta svar i röd fetstil)

Kalkylprogram. I övrigt kan man också söka på Google eller YouTube för att få mer information.

APA för nybörjare. Innan du börjar. Översikt

4 Kolumn Kalkylbladet är uppdelat i rader (horisontellt) och kolumner (vertikalt). Där dessa möts finns alltid en cell.

Statistikens grunder 1 och 2, GN, 15 hp, deltid, kvällskurs

DATORÖVNING 5: SANNOLIKHETSFÖRDELNINGAR FÖR

Filbindningar. Mike McBride Översättare: Stefan Asserhäll

Ett enkelt Kalkylexempel - Fruktaffären

Introduktion till frågespråket SQL (v0.91)

LABORATION 3 - Regressionsanalys

MVE051/MSG Föreläsning 7

Liten handledning i Excel och StarOffice Calc i anslutning till Datorövning 1

NetBeans 5.5. Avsikt. Projektfönster

Introduktion till Matlab

Datorövning 1 Statistik med Excel (Office 2007, svenska)

Introduktion till Winbas. excel till Winbas

Instruktioner till Inlämningsuppgift 1 och Datorövning 1

Detta dokument skall ge en kortfattad introduktion till Jasmine installationen vid DSV.

Kopplingar via datalänk från Winbas till Excel samt Pivottabell 1 (13)

Visma Proceedo. Att logga in - Manual. Version 1.3 /

Manual. Verktyg för skolanalys. Astrakan. Motion Chart på enkelt sätt. Artisan Global Media

ANVÄNDARGUIDE. ViTex

KALKYL OCH DIAGRAM. Kalkylbladet. 170 Datorkunskap Kalkyl och diagram

Skapa mapp. * Gör så här: Det finns många sätt att skapa mappar, men det enklaste sättet brukar vara följande.

Kapitel 15: Data/Matrix Editor

1.1 Skapa ett Inline-Script som skapar filen För att skapa ett inline script drar man InLine till där man vill ha själva scriptet.

Komma igång med Qlikview

Egna genvägar. Subhashish Pradhan T.C. Hollingsworth Översättare: Stefan Asserhäll

LUNDS UNIVERSITET 1(6) STATISTISKA INSTITUTIONEN Per-Erik Isberg

Programmets startmeny ser ut så här. För att få fram menyerna Avsluta, Inställningar och Användare måste du föra markören upp till det blåa fältet.

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php

Administrationsmanual ImageBank 2

F18 MULTIPEL LINJÄR REGRESSION, FORTS. (NCT

I den tidigare filen Manual Editor belystes grunderna för enkel uppdatering samt editorns utformning.

Software Translator 6.1 Manual

DATORÖVNING 3: MER OM STATISTISK INFERENS.

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

FrontPage Express. Ämne: Datorkunskap (Internet) Handledare: Thomas Granhäll

Excel Övning 1 ELEV: Datorkunskap Sida 1 Niklas Schilke

732G71 Statistik B. Föreläsning 4. Bertil Wegmann. November 11, IDA, Linköpings universitet

TVM-Matematik Adam Jonsson

Föreläsning 4. NDAB01 Statistik; teori och tillämpning i biologi

Transkript:

Matematisk statistik Stockholms universitet Kort handledning i SAS Esbjörn Ohlsson Kompendium Ny version Januari 2005

Postadress: Matematisk statistik Matematiska institutionen Stockholms universitet 106 91 Stockholm Sverige Internet: http://www.math.su.se/matstat

Matematisk statistik Stockholms universitet Kompendium 2005 http://www.math.su.se/matstat Kort handledning i SAS Esbjörn Ohlsson Ny version Januari 2005 Förord Denna handledning är skriven för användning på kurser vid Stockholms universitet, i första hand kurserna Linjära modeller och Log-linjära modeller. Kapitel 9 är skrivet med kursen Sakförsäkringsmatematik II i åtanke. SAS är ett programpaket som funnits och utvecklats under lång tid. Det allra mesta av SAS är oberoende av plattform (Windows, Unix, Linux, IBM/TSO). Där skillnader finns är denna instruktion skriven för SAS version 8.2 för Linux den version som nu (2004) finns på Matematiska institutionens datorer. Betydligt mer omfattande beskrivningar med alla tekniska detaljer finns i de (dyra) tryckta manualerna, t ex SAS Language Guide (Om DATA-steget) SAS Procedures Guide (Om elementära PROCedurer i SAS/BASE) SAS/STAT User s Guide (Om mer avancerade statistiska PROCedurer som t ex regressionsanalys) Mycket information finns även på webben, se t ex http://gsbwww.uchicago.edu/computing/research/sasmanual/stat/ Innehåll 1 Att köra SAS version 8 under Linux 3 1.1 Start, avslut och fönsterhantering............................ 3 1.2 Utvalda snabbkommandon............................... 4 1.3 Utskrift och clear.................................... 4 1.4 Spara filer........................................ 4 1.5 Sysinfo......................................... 4 2 Introduktion till SAS-programmering 6 3 DATA-steg 8 3.1 Inläsning av data.................................... 8 3.2 Bearbetning av SAS-tabeller.............................. 9 3.3 DO-slingor vid inläsning................................ 10 3.4 Att sammanfoga SAS-tabeller............................. 11 Postadress: Matematisk statistik, Stockholms universitet, 106 91. E-post: esbj@math.su.se

3.5 Att ta bort delar av en SAS-tabell............................ 12 3.6 Spara SAS-tabeller permanent (LIBNAME sats).................... 13 3.7 Titta på och skriva ut en SAS-tabell.......................... 14 4 PROC-steg 15 4.1 Sortering med PROC SORT.............................. 15 4.2 Enkel plot med PROC GPLOT............................. 15 4.3 Diagram med PROC GCHART............................. 16 4.4 Elementär statistik med PROC MEANS........................ 17 4.5 Aggregera data med PROC SUMMARY........................ 18 4.6 Tabeller med PROC FREQ............................... 19 4.7 Statistisk analys av en variabel med PROC UNIVARIATE.............. 19 4.8 PROC EXPORT..................................... 20 4.9 Utskrift med PROC PRINT.............................. 20 5 Regressionsanalys med PROC REG 21 5.1 Plottar i PROC REG.................................. 21 5.2 Vägd regression..................................... 22 5.3 Stegvis modellval i PROC REG............................ 23 5.4 Output från PROC REG................................ 23 6 Variansanalys med PROC ANOVA 24 6.1 Allmän linjär modell med PROC GLM......................... 24 6.2 Kruskal-Wallis test med PROC NPAR1WAY..................... 25 7 Kontingenstabeller 26 7.1 Inläsning av data i en kontingenstabell......................... 26 7.2 Analys av tvävägsindelade tabeller........................... 27 7.3 Analys av kontingenstabeller med PROC GENMOD................. 28 8 Logistisk regression med PROC LOGISTIC 30 8.1 Skattning av parametrar och modellanpassning.................... 30 8.2 Konfidensområden och predikterade värden...................... 30 8.3 Stegvis regression.................................... 31 9 Generaliserade linjära modeller med PROC GENMOD 32 9.1 Andra fördelningar................................... 34 9.2 Att slippa utskrift i OUTPUT.............................. 34 10 Smått och gott 35 10.1 Analys av delmängd med WHERE sats........................ 35 10.2 Kommentarer...................................... 35 10.3 Uttestning av SAS-program med OBS......................... 36 10.4 Interaktiv dataanalys med SAS/INSIGHT....................... 36 2

3 1 Att köra SAS version 8 under Linux Trots sitt namn är version 8 den första SAS-versionen för Linux. Dess editor och system för att se resultat mm är därför väldigt primitiv jämfört med Version 8 för Windows. Själva programmet är dock detsamma på alla plattformar. 1.1 Start, avslut och fönsterhantering Starta SAS genom genom att skriva sas i ett terminalfönster (fås med alt-f2). Avsluta enklast genom att gå till fönstret Explorer och välja Exit i File-menyn. Tangentkombinationen <Alt-Tab> hoppar mellan fönster i SAS, liksom i Linux för övrigt. (Du hoppar mellan olika Linux-skrivbord med <Ctrl-Tab>.) Vid start får du upp inte mindre än sju (7) SAS-fönster: i) Program Editor Skriv och redigera program. Färdigt program körs med menyvalet Run - Submit eller snabbtangenten F3. Testa t ex med det lilla programmet data test; input x y; cards; 1 2 3 4 proc print; ii) Log Kolla vad som hänt. Felmeddelanden mm. Titta här först! iii) Output Visar ev utskrift. Kommer upp automatiskt. Härifrån kan du skriva ut på papper. iv) Explorer Högerklicka dig in i Libraries - Work så ser du en lista över dina SAS-tabeller. Öppna dem så kan du redigera eller skriva ut dem. v) Results Listar alla resultat. Ej viktig. vi) Toolbox Diverse. vii) Session manager Bl a Interupt som avbryter pågående körning.

4 1 ATT KÖRA SAS VERSION 8 UNDER LINUX 1.2 Utvalda snabbkommandon <Ctrl-P> PGM Gå till editorn <Ctrl-L> LOG Gå till loggen <Ctrl-O> OUTPUT Gå till output-fönstret <Ctrl-E> CLEAR Radera all text i fönstret <F2> KEYS Visar alla snabbkommandon <F3> SUBMIT Kör programmet <F4> RECALL Återfå senast körda text 1.3 Utskrift och clear Utskrift av en SAS-tabell görs enklast från Explorer-fönstret. Editor- och Output-fönstrens text kan skrivas ut med menyvalet File - Print. OBS! Hela fönstrets innehåll skrivs ut! Även det som inte syns för stunden. Radera därför Output-fönstrets innehåll emellanåt: <Ctrl-E> eller menyn Edit - Clear All. 1.4 Spara filer File - Save As sparar filer. Ge SAS-program namn med extension sas, t ex nisse.sas. Varning! Undvik Save som ger stor risk för att radera befintliga program. 1.5 Sysinfo Tipsen nedan är hämtade från http://www.math.su.se/student/sysinfo/sas/ Att få SAS att komma ihåg inställningar som har gjorts: - Välj menyn Tools - Options - Preferences. - Välj fliken DMS. - Klicka i Save Settings on Exit. - Välj OK för att komma ur menyerna. Att konfigurera utskrifter: - Välj menyn File - Print Setup. - Välj PostScript Level 1 och sedan Properties.

1.5 Sysinfo 5 - Välj Destination. - Ändra Device type till Pipe. - I fältet för Destination skriver du lpr (LPR=Line Printer Remote). Om du föredrar att skriva ut enkelsidigt skriver du istället lpr -Ps1s om du befinner dig i lilla datorsalen eller lpr -Ps2s om du befinner dig i stora datorsalen. - Välj OK två gånger för att komma ur menyerna. Att kopiera och klistra in text: - Markera texten genom att hålla in vänster musknapp och dra över det önskade området. - Släpp upp knappen då du har markerat klart. Tyvärr försvinner den synbara markeringen vilket kan få en att tro att inget har markerats. Men markeringen finns kvar i minnet! - Klistra in markeringen genom att klicka på musens mittenknapp där du vill att inklistringen ska ske. Att i Program Editor kunna infoga nya rader mellan rader (genom att endast trycka Enter): - Välj menyn Tools - Options - Editor i fönstret Program Editor. - Klicka på pilen till höger om General Options och välj Text Editing Options. - Högerklicka på Autosplit. - Klicka på pilen till höger i Value-fältet och välj Yes. - Välj OK för att komma ur menyerna. Att få utskrifterna från Output-fönstret att passa in bättre på en A4-sida görs genom att lägg in dessa två rader i början av programmet: options pagesize=72; options linesize=64;

6 2 INTRODUKTION TILL SAS-PROGRAMMERING 2 Introduktion till SAS-programmering SAS-program består av en kombination av DATA-steg och PROC-steg (procedursteg). I DATA-steget kan du läsa in data och omforma data genom vanlig programmering. I PROC-steget används färdiga procedurer för bl a statistisk analys. Här följer ett exempel på ett enkelt SAS-program som består av två DATA-steg och två PROC-steg. De olika delarna förklaras i respektive avsnitt längre fram i kompendiet. data kompis; input namn $ alder@@; cards; Greta 34 Åke 27 proc print data=kompis; var alder; format alder 3.0; title Mina bästa kompisar 1996 ; data nytt; set kompis; if alder<30 then klass=1; else klass=2; proc plot; plot alder*klass; Varje sats i programmet avslutas med ett semikolon. Man kan skriva flera satser på samma rad eller en sats på flera rader. Det är bara semikolonet som avgör när en sats tar slut. Ett steg inleds med DATA eller PROC och slutar när det kommer ett RUN eller när ett nytt steg börjar. Tips: Bortglömda semikolon är en av de vanligaste orsakerna till fel i SAS-program. När du ger kommandot SUBMIT (F3) läser SAS in innehållet i PROGRAM-fönstret och meddelar eventuella syntax-fel i LOG-fönstret. Beräkningar utförs först när SAS stöter på ett RUN. Avsluta därför alltid programmen med

7 Resultatet av en körning är en fil (en så kallad SAS-tabell) och/eller utskrift i OUTPUT-fönstret. En SAS-session är interaktiv, dvs du behöver inte köra om tidigare steg om du vill fortsätta att arbeta med samma data. Not. SAS gör ingen skillnad på små och stora bokstäver. Välj det du trivs bäst med. Not. PROC uttalas pråck (inte pråss ) av de invigda. Not. Kommandot RECALL i PGM-fönstret ger tillbaka senast exekverade rader. RECALL finns under RUN samt under tangent F4. Not. SAS består av ett mycket stort antal moduler. Mest intressanta för oss är SAS/BASE som är grunden för all SAS-programmering, samt SAS/STAT som innehåller mer avancerade statistik-procedurer, t ex PROC ANOVA och PROC GENMOD. Andra intressanta moduler är SAS/GRAPH som ger bättre grafik än BASE, SAS/IML för matrishantering, SAS/INSIGHT för meny-styrd statistisk grafik.

8 3 DATA-STEG 3 DATA-steg 3.1 Inläsning av data För att kunna använda SAS procedurer på en given datamängd måste man skapa en SAS-tabell (förr kallades detta ett SAS-dataset). Denna består av de numeriska värdena plus information om variabelnamn, format mm. En SAS-tabell är strukturerad som en databas-tabell med olika variabler som kolumner och s k observationer som rader. En SAS-tabell är inte läsbar för andra program än SAS. Exempel: NAMN ALDER Greta 34 Åke 27 Här har vi en SAS-tabell med två observationer på två variabler (NAMN och ALDER). Not. Man kan inte använda å, ä och ö i variabelnamn, men väl i variabelvärden. Manuell inmatning Följande program skapar en SAS-tabell KOMPIS genom manuell inmatning av data. data kompis; input namn $ alder; cards; Greta 34 Åke 27 DATA-satsen inleder skapandet av en ny SAS-tabell. INPUT specificerar variabler som ska läsas in. Dollartecknet efter NAMN talar om att detta är en icke-numerisk s k character variabel. CARDS är en kvarleva från hålkortens dagar som anger att här kommer data. Observera att data inte följs av semikolon. Datainläsningen är det enda ställe där det spelar roll vilken rad saker står på. Vill man ha alla data på en rad måste man avsluta INPUT-raden med @@, så här data kompis; input namn $ alder@@; cards;

3.2 Bearbetning av SAS-tabeller 9 Greta 34 Åke 27 Resultatet av detta DATA-steg är en SAS-tabell KOMPIS med två observationer på variablerna NAMN och ALDER. Detta framgår av LOGgen. Däremot händer inget i OUTPUT-fönstret. En god vana är att alltid kontrollera att inläsningen gått som man tänkt sig genom att titta på SAS-tabellen i Explorerfönstret, se avsnitt 3.7. Inläsning från fil När man vill läsa data från en fil utanför SAS måste man tala om filens namn och var den finns med ett INFILE-statement. Antag att data finns i en vanlig textfil med namnet enskede.dat vilken du lagt i mappen lab1 inuti mappen linmod. Man kan då skriva: data kompis; infile linmod/lab1/enskede.dat ; input namn $ alder; VARNING! Operativsystemberoende! I Windows och Mac OS skriver man filreferensen annorlunda. Det kan hända att data ligger med tab-avskiljare istället för mellanslag. Det löser man med att skriva infile linmod/lab1/enskede.dat expandtabs; 3.2 Bearbetning av SAS-tabeller Man kan bearbeta befintliga SAS-tabeller i nya datasteg. Med en SET-sats talar man om vilken SAStabell som avses. data nytt; set kompis; if alder<30 then klass=1; else klass=2;

10 3 DATA-STEG Här bildas en ny variabel KLASS som antar värdet 1 eller 2. I DATA-steg kan man använda de fyra räknesätten +, -, *, /. Upphöjt till heter **. De vanliga matematiska funktionerna finns naturligtvis, såsom t ex logald=log(1+alder**2); Detta skapar exempelvis en ny variabel LOGALD som är naturliga logaritmen av aldern i kvadrat. EXP(X) ger ex, SQRT(X) ger kvadratrot. Flera satser kan utföras givet ett villkor med DO...END. data nytt; set kompis; if alder<30 then do; klass=1; lag= Hammarby ; alder=alder-1; end; Man kan ange mer komplicerade villkor med AND if alder<30 and sex= Male then klass=1; 3.3 DO-slingor vid inläsning I bl a variansanalys använder man sig av klassvariabler som talar om vilken klass en observation tillhör. Ofta är värdena på en sådan variabel bara ordningstalen 1, 2, 3, 4,... Då kan det hända att dessa inte finns på den datafil man läser in. Enklaste sättet att skapa dem är att använda DO-slingor. data bonde; infile /linmod/lab1/bromma.dat ; do groeda=1 to 3; do goedsel=1 to 2; input skoerd@@; output; end;

3.4 Att sammanfoga SAS-tabeller 11 end; Här läser vi in 6 värden på variabeln SKOERD, ett för var och en av de möjliga kombinationerna av variablerna GROEDA och GOEDSEL. Filen måste vara organiserad så att först kommer värdet för kombinationen GROEDA=1 & GOEDSEL=1, sedan för GROEDA=1 & GOEDSEL=2 etc. @@ behövs om data inte ligger ett på varje rad. Den absolut nödvändiga OUTPUT-satsen anger att nu ska aktuella värden skrivas till vår nya SAS-tabell BONDE. Även DO-variablerna skrivs dit. Om indatafilen såg ut så här 12 17 14 11 16 13 får vi en SAS-tabell som ser ut så här OBS GROEDA GOEDSEL SKOERD 1 1 1 12 2 1 2 17 3 2 1 14 4 2 2 11 5 3 1 16 6 3 2 13 Notera återigen att OBS inte är en variabel. 3.4 Att sammanfoga SAS-tabeller SAS-tabeller kan sammanfogas (konkateneras) på bredden eller längden. Sammanfogning på bredden kan ske med ett MERGE-statement i ett datasteg. Datasteget data hus; merge brick sten; ger till resultat en SAS-tabell kallad HUS som innehåller alla variabler som finns i minst en av SAStabellerna BRICK och STEN. Antalet observationer är lika med maximum av antal observationer i de två SAS-tabellerna. Vid behov fylls positioner ut med missing values. Vanligare är att man vill matcha ihop data som har samma värde by en viss variabel. Antag att båda SAS-tabellerna BRICK och STEN innehåller en variabel NAMN. Då ger data hus;

12 3 DATA-STEG merge brick sten; by namn; till resultat att HUS innehåller variabeln NAMN samt alla övriga variabler i BRICK och STEN. Värdena på variabeln NAMN behöver inte matcha ett-till-ett. För detaljer om vad som händer i sådana fall, se SAS Language Guide. Innan man gör MERGE med BY måste SAS-tabellerna vara sorterade efter BY-variabeln (NAMN i exemplet ovan). Detta kan ordnas med PROC SORT, se nedan. Det går bra att sortera och göra MERGE efter mer än en variabel: data hus; merge brick sten; by stad namn; Matchningen sker nu hierarkiskt, dvs för varje STAD sker en matchning av dem som har samma NAMN. Sammanfogning på längden kan gå till så här: data semla; set cream bulle; Här läser SAS först in hela CREAM till den nya SAS-tabellen SEMLA. Därefter bygger man på nedåt med BULLE. Antalet observationer i SEMLA blir summan av antal observationer i CREAM och BULLE. Om CREAM och BULLE innehåller samma variabler kommer SEMLA också att ha den variabeluppsättningen. Allmänt kommer SEMLA att innehålla varje variabel som ingår i någon av CREAM och BULLE. Vid behov fylls då vissa positioner ut med missing values. 3.5 Att ta bort delar av en SAS-tabell Om vi omvänt vill skapa en mindre SAS-tabell ur en större kan vi t ex använda DROP (på bredden ) och DELETE (på längden) i ett datasteg. data brick; set hus;

3.6 Spara SAS-tabeller permanent (LIBNAME sats) 13 drop window door; ger till resultat att BRICK blir en kopia av HUS exklusive variablerna WINDOW och DOOR. Antag nu att vi vill dela upp en SAS-tabell SEMLA på längden. data bulle; set semla; if bagare= Nisse then delete; leder till att BULLE endast innehåller de rader av SEMLA som inte har Nisse som värde på variabeln BAGARE $. OBS! Nisse är ett annat värde än NISSE eller nisse. Numeriska variablers värden skrivs utan citationstecken: if bakdag=991224 then delete; 3.6 Spara SAS-tabeller permanent (LIBNAME sats) SAS-tabeller som skapas under en session raderas när programmet avslutas. Ibland vill man bevara en SAS-tabell för framtiden. Det kan göras genom att en gång under sessionen ge ett LIBNAMEkommando libname minlab1 /linmod/lab1/ ; LIBNAME-satsen gäller resten av sessionen. minlab1 står här för ett godtyckligt (och tillfälligt) namn för mappen lab1 inuti mappen linmod. (Satsen kan stå fritt från övriga programdelar.) Du kan nu spara en permanent version av SAS-tabellen gnesta så här data minlab1.flen; set gnesta; Nu kommer en SAS-tabell FLEN att sparas permanent och kunna läsas senare. Innehållet är identiskt med vad som finns i GNESTA, men den senare, tillfälliga tabellen kommer att raderas när man du stänger SAS.

14 3 DATA-STEG 3.7 Titta på och skriva ut en SAS-tabell Gå till Explorer-fönstret och dubbel-klicka på filen. Den finns i Libraries - Work (om du inte sparat i ett annat Library enligt avsnitt 3.6). Här kan du titta på en SAS-tabell som du skapat och även skriva ut den på papper vid behov. Glöm inte att stänga fönstret om du ska arbeta vidare med denna SAS-tabell! Annars kan SAS inte arbeta med till din öppna SAS-tabell. Man vill sällan se alla decimaler på en kontinuerlig variabel. Man kan påverka hur variabeln visas genom att i datasteget ange en FORMAT-sats. data semla; set degen; format bulle 6.2; FORMAT-satsen talar om att variabeln BULLE ska skrivas med 6 positioner varav 2 decimaler. En bra tumregel är att man sällan vill se mer än tre siffror (förutom eventuella inledande nollor).

15 4 PROC-steg I PROC-steg använder man färdiga procedurer för att exempelvis sortera, plotta eller göra statistisk analys. 4.1 Sortering med PROC SORT PROC SORT sorterar data i stigande alfanumerisk ordning efter variabeln i en BY-sats. proc sort data=folkmangd; by kommun; Optionen DATA=KOMPIS talar om vilken SAS-tabell vi vill skriva ut. (Den används i de flesta procedurer.) KOMMUN är den variabel vi väljer att sortera efter. Man kan också använda fler BY-variabler proc sort data=folkmangd; by kommun forsamling; Här sorteras data först efter kommun och därefter inom kommun efter församling. Sortering är en förutsättning för att BY KOMMUN ska kunna användas i andra PROC-steg samt i MERGE, se avsnitt 3.4. 4.2 Enkel plot med PROC GPLOT En plot av y-värden mot x-värden i en SAS-tabell MITTEGET erhålls i OUTPUT-fönstret med följande program. proc gplot data=mitteget; plot y*x; Flera plottar i samma diagram erhålls med OVERLAY.

16 4 PROC-STEG proc gplot data=ditteget; plot yy*xx zz*xx= A /overlay; Här får vi både YY och ZZ plottade mot XX i samma diagram. Genom att ange = A får vi en annan symbol för den andra plotten (detta är ej nödvändigt, men bra vid utskrift i svart/vitt). 4.3 Diagram med PROC GCHART PROC GCHART ger histogram. proc gchart data=mitt; vbar y; ger ett histogram över variabeln Y. Gruppindelning är möjlig: proc gchart data=ditt; vbar y/group=x; ger Y-histogram för varje X-grupp. Ett alternativ är proc gchart data=hans; vbar y z/subgroup=x; som gör grupperingen inom staplarna. Här har vi också lagt till variablen Z. I detta fall görs först histogram för Y, sedan för Z. Om du vill ha procent i stället för antal på y-axeln lägger du till en option så här vbar y/group=x type=percent;

4.4 Elementär statistik med PROC MEANS 17 Not. En snabbare, men mycket primitiv plot fås med PROC CHART, dvs genom att ta bort G:et i ovanstående satser. 4.4 Elementär statistik med PROC MEANS PROC MEANS ger medelvärden, standardavvikelser mm. Den används normalt för kontinuerliga variabler. proc means data=hennes; Här får vi medelvärden etc för samtliga variabler i SAS-tabellen HENNES. Ofta vill man begränsa sig till vissa (kontinuerliga) variabler med VAR. proc means data=inkomst; var ink skatt utg; En sats som börjar med VAR anger att medelvärden mm endast ska beräknas för de tre variablerna INK SKATT UTG. Genom att lägga till en BY-sats får vi medelvärden etc. att beräknas separat för varje värde på en variabel (i detta fall separat för män och kvinnor enligt variabeln kön, här kallad KOEN). Först måste dock INKOMST ha sorterats med PROC SORT (om den inte redan var i rätt ordning), se 4.1. proc sort data=inkomst; by koen; proc means data=inkomst; by koen; Det går naturligtvis bra att ha flera variabler: by kommun koen; Här fås medelvärde etc för kvinnor resp män i varje kommun.

18 4 PROC-STEG 4.5 Aggregera data med PROC SUMMARY En kusin till PROC MEANS är PROC SUMMARY. Egentligen är SUMMARY samma procedur utan utskrift, men vi använder den på ett annat sätt än MEANS. Ofta vill man aggregera data, det vill säga summera en större SAS-tabell till ett mindre. Antag att vi har en tabell SKADOR där variabeln SKADKOST anger skadekostnad per försäkringsskada, dvs varje rad motsvarar en sådan skada. Om variablen PERSON anger nummer på försäkringstagaren kan vi skapa en SAS-tabell med total skadekostnad per försäkringstagare genom att skriva proc summary data=skador; class person; var skadkost; output out=mindre sum=; CLASS-satsen anger att en rad ska skapas per PERSON. VAR anger vilken/vilka variabler som ska summeras. OUTPUT-satsen gör att ett nytt datset skapas, här har vi döpt det till MINDRE. Optionen SUM= anger att det är variabelns summa som ska beräknas. För att se resultatet får du gå till Explorerfönstret ingenting skrivs i Output. Här är en mer komplicerad användning av PROC SUMMARY. proc summary data=skador; class kon alder; var skadkost sjalvrisk; output out=mindre(drop=_type_ rename=(_freq_=antskad)) sum(skadkost)=totalkost mean(sjalvrisk)=medelsjr; Här gör vi en indelning efter varje kombination av kön och ålder. Vi behandlar två variabler SKAD- KOST och SJALVRISK. Den infogade DROP-optionen gör att man slipper systemvariabeln _TYPE_ i sin nya SAS-tabell. En mer användbar systemvariabel är _FREQ_ som anger hur många rader i SKADOR som bidragit till varje rad i MINDRE. Vi byter här namn på den variabeln med RENAME. Genom SUM(X)=Y anger vi att summan av X ska kallas Y. För SJALVRISK beräknar vi inte summan utan medelvärdet genom att ange MEAN.

4.6 Tabeller med PROC FREQ 19 4.6 Tabeller med PROC FREQ PROC FREQ ger frekvenstabeller, dvs svar på frågor av typ Hur många är kvinnor? Den används normalt för diskreta variabler. proc freq data=motor; tables bilar*koen; Om BILAR anger antal bilar en person har och KOEN är man/kvinna så får vi här veta hur många män resp. kvinnor som har 0 bilar, 1 bil etc. 4.7 Statistisk analys av en variabel med PROC UNIVARIATE PROC UNIVARIATE ger delvis samma resultat som PROC MEANS men här får man mycket mer, bla normalfördelningsplottar och boxplottar. Enklaste form: proc univariate data=mittoditt; Här några möjligheter med PROC UNIVARIATE: proc univariate data=dittomitt freq; FREQ anger att vi vill ha en frekvenstabell. proc univariate data=hack plot; var cputid; by koen; Här tänker vi oss att hack registrerar månadens cpu-tid för anställda på ett företag. PROC UNIVARI- ATE analyserar här hur mycket cpu-tid män resp. kvinnor använt. PLOT ger boxplot, normalfördelningsplot mm. OBS! Vanligen använder vi FREQ för diskreta variabler och PLOT för kontinuerliga!

20 4 PROC-STEG 4.8 PROC EXPORT Ibland vill man exportera data till Excel för vidare behandling, t ex för att göra plottar. Detta kan göras med PROC EXPORT proc export data=semla outfile="c:\myfiles\vadsomhelst.xls"; där C:\myfiles\ är den mapp där du vill spara filen och VADSOMHELST är det namn du ger filen. Extensionen.xls talar om att det ska bli en Excel-fil. 4.9 Utskrift med PROC PRINT I tidigare versioner av SAS fanns inte Explorer-fönstret, se 3.7. För att titta på sina SAS-tabeller fick man då göra utskrift till Output-fönstret med PROC PRINT. För fullständighets skull ger vi ett exempel på detta, trots att PROC PRINT numera i stort sett har spelat ut sin roll. proc print data=kompis; var alder; title Mina bästa kompisar 1996 ;

21 5 Regressionsanalys med PROC REG Anpassning av en multipel regressionsmodel där en variabel Y förklaras av en eller flera variabler X1, X2,..., görs med PROC REG. Om du vill köra mer än en regression rekommenderas att du gör ett VAR statement som i nedanstående exempel. proc reg data=forsta; var y x1-x12 z; model y=x1; model y=x1 z; model y=x1-x5; ger tre regressionsanalyser, nämligen av Y m a p X1 (enkel linjär regression), av Y m a p X1 och Z samt av Y m a p de fem variablerna X1-X5. Det finns många optioner att lägga till. Exempel: model y=x1/r; model y=x1/clm; model y=x1/cli; model y=x1/r clm cli; ger i tur och ordning residualer mm, konfidensintervall för linjen samt prediktionsintervall. Det sista alternativet ger alla tre sakerna på en gång. 5.1 Plottar i PROC REG Du kan också få (primitiva) plottar för en modell du redan kört med ett PLOT statement (icke att förväxla med PROC GPLOT). Vi visar några av möjligheterna med ett par exempel. proc reg data=andra; model y=x1; plot y*x1; ger en plot av Y mot X1;

22 5 REGRESSIONSANALYS MED PROC REG plot y*x1/symbol= * ; ger en plot av Y mot X1 med symbolen *. Flera plottar kan genereras på en gång och ges olika symboler: plot y*x1 = * y*x2= o x1*x2= x ; Med hjälp av optionerna LINEPRINTER i kombination med VPLOTS och HPLOTS kan man få flera plottar på samma blad, till exempel så här: proc reg data=tredje lineprinter; model y=x1-x5; plot residual.*predicted. residual.*(x1 x2 x4)/vplots=2 hplots=2 symbol= * ; (Observera att PLOT-satsen här sträcker sig över två rader det är semikolon som avgör var en rad slutar.) Detta ger 4 plottar, nämligen av residualer mot predikterade värden samt mot X1, X2 och X4, alla med symbolen *. Variablerna RESIDUAL. och PREDICTED. genereras av PROC REG själv och är alltså inga vanliga SAS-variabler. Optionerna VPLOTS och HPLOTS anger antal plottar på samma blad, i detta fall två i bredd och två i höjd (V=Vertikal, H=horisontell). OBS! Se till att ha tillräcklig sidstorlek. Sidstorleken kan ändras med options pagesize=72; var som helst i eller utanför ett SAS-program (72 är förstås bara ett exempel) eller i OPTIONSfönstret. Slutligen visar vi hur man kan få en plot med den anpassade räta linjen inlagd ovanpå en plot av Y mot X. plot y*x = y predicted.*x = * /overlay; 5.2 Vägd regression Vägd regression erhålls med en WEIGHT-sats.

5.3 Stegvis modellval i PROC REG 23 weight tyngd; Här innehåller variabeln TYNGD de värden vi vill använda som vikter. 5.3 Stegvis modellval i PROC REG Stegvis val av modell med inklusion/exklusion av mest/minst signifikanta variabler görs med optionen SELECTION=F (forward selection), SELECTION=B (backward selection) samt SELECTION=STEPWISE (som forward selection men med uteslutande av ev. variabler som förlorat sin signifikans). Signifikansnivåerna för inklusion resp. exklusion styrs av SLENTRY (default=0.50) och SLSTAY(default=0.10). Här är ett exempel: model y=x1-x5/selection=f slentry=0.20; Detta ger forward selection. Nya variabler tas in i modellen så länge det finns någon som är signifikant på 20%-nivån. Automatisk stegvis regression bör dock användas med försiktighet men kan vara värdefullt om man har många variabler. Låt aldrig SAS ensamt välja modell åt dig! 5.4 Output från PROC REG Med ett OUTPUT-statement kan vi skapa en ny SAS-tabell för fortsatt analys. proc reg data=tredje; model y=x1-x5; output out=nyadata p=gissning r=kvarleva; Tabellen NYADATA består av den gamla SAS-tabellen plus predikterade värden i den nya variabeln GISSNING samt residualer i variabeln KVARLEVA. (En bra idé kan vara att nu köra PROC UNI- VARIATE på KVARLEVA. )

24 6 VARIANSANALYS MED PROC ANOVA 6 Variansanalys med PROC ANOVA Statistisk analys enligt en balanserad variansanalysmodell kan fås med PROC ANOVA. Obalanserade modeller analyseras med PROC GLM. Datasettet skall förutom y-variabeln även innehålla variabler som motsvarar de olika faktorerna, se avsnittet 3.3 om DO-slingor vid inläsning. I det avsnittet läste vi in en SAS-tabell BONDE med faktorerna GROEDA och GOEDSEL samt y-variabeln SKOERD. Här är en variansanalys på denna SAS-tabell: proc anova data=bonde; class groeda goedsel; model skoerd=groeda goedsel; means groeda goedsel; CLASS (nödvändig!) räknar upp faktorerna i variansanalysen. MODEL (nödvändig!) anger modellen. Ovan har vi en rent addidtiv modell. Om vi hade haft replikationer kunde vi ha lagt till samspelet GROEDA*GOEDSEL: model skoerd=groeda goedsel groeda*goedsel; En hierarkisk modell med variablerna FARFAR, BARN och BARNBARN kan anges så här: model skoerd=farfar barn(farfar) barnbarn(farfar barn); MEANS behöver inte vara med i PROC ANOVA. Denna sats ger utskrift av medelvärden. I fallet ovan får vi medel för varje GROEDA resp för varje GOEDSEL. Med replikat kunde vi skriva means groeda*goedsel; och få ut medelvärden över replikaten för varje kombination av GROEDA och GOEDSEL. 6.1 Allmän linjär modell med PROC GLM En obalanserad variansanalys kan analyseras med PROC GLM (General Linear Model) med samma syntax som ANOVA. proc glm data=bonde;

6.2 Kruskal-Wallis test med PROC NPAR1WAY 25 class groeda goedsel; model skoerd=groeda goedsel; För andra användningar av PROC GLM hänvisas till SAS/STAT Guide. 6.2 Kruskal-Wallis test med PROC NPAR1WAY Proceduren NPAR1WAY gör diverse icke-parametrisk analys för k oberoende stickprov (samma situation som vid ensidig variansanalys). Ett exempel: proc npar1way data=draeng wilcoxon; class grupp; var resp1; Optionen WILCOXON gör att vi får Kruskal-Wallis test (som i fallet k=2 är detsamma som Wilcoxons tvåssampeltest). En och endast en variabel definierar grupperna i CLASS satsen. VAR satsen anger responsvariabeln, i detta fall RESP1. Det är tillåtet att ange flera responsvariabler, vilka då analyseras var för sig.

26 7 KONTINGENSTABELLER 7 Kontingenstabeller Det är möjligt att utföra de flesta beräkningar och analyser för diskreta data med hjälp av SAS. Man bör emellertid vara försiktig eftersom en del av SAS-procedurerna är ålderstigna och inte alltid är anpassade till teorin för loglineära modeller. Ibland använder sig SAS av ganska speciella beteckningar, procedurer och normeringar. 7.1 Inläsning av data i en kontingenstabell Inläsning av data kan ske på flera sätt. Det enklaste är att man anger nivåerna på de olika indelningsgrunderna samt observationen i motsvarande cell. Här är data över studenter som tillhör olika colleges (let, engin, etc.) och deras politiska sympatier (rep, dem, etc). data c253; input college $ aff $ obs; cards; let rep 34 let dem 61 let ind 16 engin rep 31 engin dem 19 engin ind 17 agri rep 19 agri dem 23 agri ind 16 edu rep 23 edu dem 39 edu ind 12 Ett enklare sätt är kanske att numrera kategorierna i stället och skriva: data c253; input i j obs; cards; 1 1 34 1 2 61 1 3 16

7.2 Analys av tvävägsindelade tabeller 27 2 1 31 2 2 19 2 3 17 3 1 19 3 2 23 3 3 16 4 1 23 4 2 39 4 3 12 Detta är samma sätt att strukturera datamängden som vi använde för variansanalys. I fall man har en fil med data i tabellform, tex skrivna som i filen ex253.tex 34 61 16 31 19 17 19 23 16 23 39 12 så kan man läsa in data med stegen: data c253; infile ex253.tex ; do i=1 to 3; do j=1 to 4; input obs @@; output; end; end; Högre ordningens tabeller kan läsas in på motsvarande sätt. 7.2 Analys av tvävägsindelade tabeller Det enklaste sättet att få olika test för tvåvägsindelade data är att använda PROC FREQ. Följande SAS-program resulterar i att Pearsons X 2 och likelihoodkvottestet beräknas och skrivs ut. Vi antar att de två indelningsgrunderna kallas A och B samt att de observerade cellvärdena har kallats OBS.

28 7 KONTINGENSTABELLER proc freq data=tabell; weight obs; tables a*b/chisq; Om vi har en 2x2-tabell så kommer vi också att få p-värden för Fishers exakta test (både ensidiga och tvåsidigt). Vi kan också få exakta test för andra tabeller (dvs större tabeller än fyrfältstabeller) genom att skriva tables a*b/chisq exact; Beräkningar av det exakta testet kan om vi har många celler och stora marginalsummor ta (nästan oändligt) lång tid. Man bör därför kanske undvika att begära att SAS gör dessa beräkningar om man inte har mycket goda skäl. tables a*b/chisq; exact rror; ger dessutom relativ risk RR och oddskvoter OR. Ovanstående fungerar tyvärr endast för tvåvägstabeller. För högre ordningens tabeller kan man använda PROC GENMOD. 7.3 Analys av kontingenstabeller med PROC GENMOD Kontingenstabeller under Poisson sampling är ett specialfall av s k Generaliserade linjära modeller (GLM). Sådana kan analyseras med PROC GENMOD. Det mesta av analysen är även giltigt för multinomial och produkt-multinomial sampling. Här analyserar vi hypotesmodellen i en tvåvägstabell: proc genmod data=d3c; class form betyg; model n = form betyg / link=log dist=poisson; CLASS-satsen känner vi igen från ANOVA. Optionen DIST=POISSON specificerar att fördelningen är Poisson, men används även om vi skulle ha multinomial eller produkt-multinomial sampling. LINK=LOG anger att det är logaritmering som gör väntevärdena linjära. I en allmän GLM kan man ha andra sannolikhetsfördelningar och andra s k länkar. GENMODs output tolkas så här: Criteria for Assessing... ger D, även kallad Deviance, X 2 samt log-likelihooden. Parametervärdena har vi inte så stor nytta av här. Nu byter vi till den mättade modellen. Här får vi meningsfulla parameterskattningar.

7.3 Analys av kontingenstabeller med PROC GENMOD 29 GENMOD använder referenscell-parametrisering med sista cellen (enligt alfanumerisk ordning) som referenscell. proc genmod data=d3c; class form betyg; model n = form betyg / link=log dist=poisson; Notera att tvåfaktorsamspelet är log(oddskvoten). ur den får vi oddskvoten och konfidensintervall för densamma. Man kan ändra referenscell genom att skriva proc genmod data=d3c order=data; Nu kommer referenscellen att bli den sista kategori som förekommer i indata. Lyckligtvis framgår det av output vilken cell som är referens. Högre ordningens tabeller analyseras på samma sätt. De olika modellerna fås här genom lämpligt val av MODEL, t ex model n = form betyg kon / link=log dist=poisson; för en modell med FORM och BETYG oberoende av KON men sinsemellan beroende. Notera att skrivningen model n = a b c a d / link=log dist=poisson; ger analys av den modell vi skulle beteckna [ABC] [AD].

30 8 LOGISTISK REGRESSION MED PROC LOGISTIC 8 Logistisk regression med PROC LOGISTIC För analyser som bygger på den logistiska regressionsmodellen använder man i SAS proceduren LO- GISTIC. För att använda denna måste man ha en responsvariabel som tar värdet 0 eller 1, samt ett antal förklarande variabler med vars hjälp ett regressionssamband kan byggas upp. 8.1 Skattning av parametrar och modellanpassning Antag att vi har en SAS-tabell som heter MB2A och som innehåller variablerna CA, ANT, SEX, AGE och GROUP. Där CA är responsvariabeln som tar värdena 0 eller 1. SEX, AGE och GROUP är de förklarande variablerna som skall bygga upp regressionssambandet. Här har man valt att läsa in data i komprimerad form och ANT står för antalet observationer med samma värden på CA, SEX, AGE och GROUP. Ett SAS-program för att analysera dessa data kan ha följande utseende: proc logistic descending data=mb2a; freq ant; model ca = sex age group/scale=none aggregate; DESCENDING på första raden anger att oddsen skall beräknas med sannolikheten för CA=1 i täljaren. Man behöver inte skriva detta men får då inventerade värden på oddsen vilket medför att alla regressionskoefficienter får omvända tecken. FREQ ANT; talar om att dessa värden skall räknas som ANT stycken observationer. Om man har läst in data individ för individ, så att varje rad svarar mot en observation där CA=0 eller 1, så behövs inte denna sats. MODEL-satsen ser i princip ut som motsvarande satser för regressionsanalys i GLM. SCALE = NONE anger att anpassningsmått för modellen skall skrivas ut och AGGREGATE att dessa ska beräknas så att alla observationer med samma kombination av förklarande variabler räknas som en grupp (jmf tabelldata analyserade med loglineära modeller). 8.2 Konfidensområden och predikterade värden Det finns även andra möjligheter i MODEL-kommandot. model ca= sex age group/risklimits; ger utskrift av skattade oddskvoter (dvs förändringen i sannolikheten när en förklarande variabel ändrar sig 1 enhet medan övriga är konstanta) för varje förklarande variabel med 95%-konfidensområden.

8.3 Stegvis regression 31 Värdet på enheten som man mäter förändringen i kan väljas med kommandot units sex=1 age=5 group=1; Om man vill ha ut de predicerade sannolikheter som modellen ger måste man skapa en ny SAS-tabell som innehåller dessa och skriva ut denna nya SAS-tabell. Detta gör man med ett OUTPUT OUT -kommando. Det kan se ut som följer: proc logistic descending data=mb2a outest=skatt covout; freq ant; model ca = sex age group/waldcl waldrl rsq; output out=greta pred=sanno; Här ger optionen OUTEST en SAS-tabell, kallad SKATT, med parameterskattningarna, samt kovariansmatrisen (på grund av att vi skrev COVOUT). Raden som börjar med OUTPUT ger en SAS-tabell som här kallas GRETA vilken innehåller ursprungsdata plus de predikterade sannolikheterna p(x) för varje x-kombination i data. RSQ ger R 2. WALDCL ger konfidensintervall för parameterskattningarna och WALDRL är ekvivalent med RISKLIMITS ovan. 8.3 Stegvis regression Liksom lineär regression kan man använda stegvisa metoder för att söka sig fram till enkla regressionssamband. Man får SAS att göra sådana beräkningar på samma sätt som i GLM, dvs med ett MODEL-kommando av typen model ca = sex age group/selection=stepwise;

32 9 GENERALISERADE LINJÄRA MODELLER MED PROC GENMOD 9 Generaliserade linjära modeller med PROC GENMOD Generaliserade linjära modeller analyseras med PROC GENMOD. Vi har redan sett exempel på detta i avsnitt 7.3. Här är ett exempel proc genmod data=semla; class jast mjol mjolk; model bulle = jast mjol mjolk / dist=poisson link=log pscale obstats; ods output Obstats=nysemla; ods output ParameterEstimates=bakverk; weight gredde; title Diskreta semlor ; CLASS anger (som i ANOVA) de kategoriska variablerna. (Kontinuerliga variabler kan användas men skall då inte anges i CLASS-satsen.) Vidare är BULLE responsen y och JAST, MJOL och MJOLK tre förklarande x-variabler av kategorisk typ. DIST anger fördelningen för Y, eller annorlunda uttryckt vilken variansfunktion v(µ) vi antar i en quasi-likelihood-ansats. DIST= v(µ) = Namn Ex på användning NORMAL 1 Normalfördelning Linjära modeller POISSON µ Poissonfördelning Kontingenstab., skadefrekvens GAMMA µ 2 Gammafördelning Medelskada IG µ 3 Invers Gaussfördelning Medelskada BINOMIAL µ(1 µ) Binomialfördelning Logistisk regression LINK anger länkfunktionen g(µ). LINK= Länkfunktion g(µ)= Ex på användning ID identitet µ Linjära modeller LOG log log(µ) Kontingenstab., premietariff LOGIT logit, logistisk log(µ/(1 µ)) Logistisk regression PSCALE anger att skalparametern φ ska skattas med Pearsons X 2 delat med frihetsgrader. Ett alternativ är DSCALE som ger deviansen D delta med frihetsgrader. Om ingen av dessa optioner finns med får man för Poisson och binomial φ = 1 och för övriga ML-skattningen av φ. Obs att SAS i sin output ger ett värde SCALE som inte är φ, se tabell nedan.

33 DIST= SCALE NORMAL φ POISSON φ GAMMA 1/φ IG φ BINOMIAL φ OBSTATS gör att predikterade värden med konfidensintervall, residualer med mera skrivs ut. Vanligare är att man vill spara dem i en fil och det är det som görs med ODS OUTPUT OBSTATS (OBservational STATisticS). Satsen ODS OUTPUT PARAMETERESTIMATES=BAKVERK sparar på samma sätt parameterskattningarna i en fil här kallad BAKVERK, vilket är användbart om man exempelvis vill få relationstal vid prissättning av försäkring man kan då lägga till ett datasteg som, om vi använt LINK=LOG, ser ut som data kaffe (keep= parameter level1 fika socker gredde); set bakverk; reltal = exp(estimate); nedre = exp(lowercl); ovre = exp(uppercl); format reltal nedre ovre 7.2; där vi har beräknat relationstalet i FIKA och nedre och övre konfidensgränser för parametern i SOCK- ER och GREDDE. WEIGHT anger eventuell vikt w (i försäkringssammanhang kallas denna för exponeringen ). Ett problem är att SAS alltid väljer den kategori som har högst alfanumeriskt värde som basklass (i vilken parametern sätts till noll). Normalt vill man själv bestämma basklass. Det är lite omständligt, men görs så här: döp tillfälligt om referenskategorierna till ett namn med högre värde än alla andra. Ett exempel: data semla; set semla; if jast= 001 then jast= BAS ; if mjol= 002 then mjol= BAS ; if mjolk= 004 then mjolk= BAS ; Värdena får sedan återställas med mosatta IF-satser i ett datasteg efter PROC GENMOD.

34 9 GENERALISERADE LINJÄRA MODELLER MED PROC GENMOD 9.1 Andra fördelningar Utöver de fem standardfördelningarna ovan kan man använda fördelningar från andra Exponentiella dispersionsmodeller (EDM) genom att ange de fundamentala delarna av likelihooden i några så kallade programming statements, med satserna DEVIANCE och VARIANCE. I följande exempel gör vi analys med Poissonfördelningen som exempel. Denna ska alltså ge samma resultat som att ange DIST=POISSON i MODEL-satsen. proc genmod data=semla; class jast mjol mjolk; a=_mean_; y=_resp_; if y=0 then d=2*a; else d=2*( y*log(y/a)-(y-a) ); variance var=a; deviance dev=d; model bulle = jast mjol mjolk / link=log pscale obstats; Här är _MEAN_ och _RESP_ av systemet definierade variabler för µ respektive Y. I praktiken är det naturligtvis intressant att definiera likelihooden för andra fördelningar än de fem som är standard ovanstående är endast till för att visa hur det går till. Obs att man måste ange både variansfunktion och devians. Det går alltså inte att bara byta variansfunktion till någon man önskar. 9.2 Att slippa utskrift i OUTPUT I praktiken vill man ofta slippa GENMODs långa utskrifter i OUTPUT-fönstret och bara spara resultaten i nya SAS-tabeller. ODS (Output Delivery System) har ett allmänt användbart kommando för detta. ods output none; Denna sats kan skrivas varsomhelst. Efter den skrivs ingenting ut i OUTPUT-fönstret. Inställningen återställs med ods output all;

35 10 Smått och gott 10.1 Analys av delmängd med WHERE sats Med en WHERE sats i PROC-steget kan man ange att bara vissa data ska ingå i analysen utan att man behöver bilda en ny, mindre SAS-tabell. WHERE kan användas med alla procedurer. proc means data=raastor; where utb=3; anger att endast observationer med värdet 3 på variabeln UTB ska användas för beräkningarna. where grupp ne Svensk or tid <= 5; anger att observationer med värdet Svensk på variabeln GRUPP ska utgå, liksom sådana med TID>5. NE betyder Not Equal to inte National-Encyklopedin! Notera att SAS-tabellen inte påverkas av WHERE. 10.2 Kommentarer Kommentarer, dvs text som inte påverkar programmet, anges i SAS genom att satsen inleds med *. Sluta med semikolon som vanligt. *Detta är en kommentar som inte gör någon skada; Större textmängder säts inom /* och */. proc means; /*proc sort; by koen; */ data nytt; set gammalt;

36 10 SMÅTT OCH GOTT x=log(y); Här kommer PROC SORT inte att utföras. Detta är användbart vid uttestning av program. En god idé är att förse programmet med utförliga kommentarer. Exempel: /*** Logaritmerar responsen till regressionen ***/ data nytt; set gammalt; x=log(y); /*** Testar regression med och utan logaritmering ***/ proc reg; var y x z; model y=z; model x=z; 10.3 Uttestning av SAS-program med OBS Om man ska köra ett SAS-program med många data (många observationer) kan det vara lämpligt att först testköra programmet på en delmängd av data. Följande program begränsar TEST till de 10 första observationerna i RAASTOR. data test; set raastor(obs=10); 10.4 Interaktiv dataanalys med SAS/INSIGHT SAS/INSIGHT är en modul i SAS som erbjuder enkla sätt att göra plottar och statistisk analys utan programmering. 1. Välj menyn GLOBALS: ANALYZE: INTERACTIVE DATA ANALYSIS.

10.4 Interaktiv dataanalys med SAS/INSIGHT 37 2. Välj SAS-tabell, vanligen ur WORKS library. Ett första steg i en regressionsanalys är att göra en matrisplott av data. Detta kan göras med Scatter Plot (Y X), där alla variabler väljs som Y och X, dvs alla variabler plottas mot varandra, såväl responsen y som förklarande x. Normalplot och Leverage plots 1. Specificera regressionen med Fit (Y X). 2. Klicka på Output-knappen och kryssa där för de tre plottarna. Ni får nu plottar av residualer mot ˆµ, normalfördelningsplot (QQ) av residualer samt (partial) leverage plots. Se stencilen Grafisk diagnostik för regressionsmodeller för tolkning av plottarna. Esbjörn Ohlsson 2004