I begyndelsen skabte SAS procedurer og output. Output var formløst og tomt. Så sagde SAS: “Lad der være ODS,” og der var ODS. kunderne så, at ODS var godt, og SAS adskilte beregningen fra visningen og forvaltningen af output.
Det foregående afsnit forsimpler SAS Output Delivery System (ODS), men sandheden er, at ODS er en kraftfuld funktion i SAS. Du kan bruge ODS til at sende SAS-tabeller og -grafik til forskellige outputdestinationer, herunder HTML, PDF, RTF og PowerPoint. Du kan styre stilen og attributterne for output og dermed skabe en tilpasset rapport. Der er blevet skrevet hundredvis af artikler og bøger om ODS. En meget grundlæggende introduktion er Olinger (2000) “ODS for Dummies.”
For en statistisk programmør er den mest nyttige destination OUTPUT-destinationen. OUTPUT-destinationen sender en tabel eller en graf til et SAS-datasæt. Som følge heraf kan du få programmatisk adgang til hvert enkelt element i output.
Følgevirkningerne af det foregående udsagn er monumentale. Jeg kan ikke overdrive betydningen af OUTPUT-destinationen, så lad mig sige det igen:
ODS OUTPUT-destinationen giver dig mulighed for at gemme enhver værdi, der produceres af en hvilken som helst SAS-procedure. Du kan derefter læse denne værdi ved hjælp af et SAS-program.
ODS OUTPUT-destinationen besvarer et almindeligt spørgsmål, der stilles af nye programmører på SAS-diskussionsfora: “Hvordan kan jeg få en statistik ind i et datasæt eller i en makrovariabel?” Trinene er som følger:
- Brug ODS TRACE ON (eller SAS-dokumentationen) til at finde navnet på den ODS-tabel, der indeholder den ønskede statistik.
- Brug ODS OUTPUT-anvisningen til at angive tabellens navn og et datasætnavn. Syntaksen er ODS OUTPUT TableName=DataSetName. Kør derefter proceduren for at generere tabellen.
- Læs datasættet for at få værdien af statistikken.
Er du ny i #SAS-programmering? Sådan får du en hvilken som helst statistik ind i et datasæt. Click To Tweet
Som eksempel kan du antage, at du har til hensigt at bruge PROC REG til at udføre en lineær regression, og at du ønsker at fange R-square-værdien i et SAS-datasæt. Dokumentationen for proceduren indeholder en liste over alle de ODS-tabeller, som proceduren kan oprette, eller du kan bruge ODS TRACE ON-anvisningen til at få vist de tabelnavne, der produceres af PROC REG. Dataene er de 428 køretøjer i datasættet Sashelp.Cars, som distribueres sammen med SAS:
ods trace on; /* skriv ODS-tabellenavne til log */proc reg data=Sashelp.Cars plots=none; model Horsepower = EngineSize Weight;quit;ods trace off; /* stop writing to log */
Output Added:-------------Name: FitStatisticsLabel: FitStatistikSkabelon:: FitStatistik Stat.REG.FitStatisticsPath:: Stat.REG.FitStatistics Reg.MODEL1.Fit.Horsepower.FitStatistics-------------
Ved at se på outputtet kan man se, at den tredje tabel indeholder R-square-værdien. Ved at se på SAS-loggen kan du se, at navnet på den tredje tabel er “FitStatistics.”
Spar tabellen til et SAS-datasæt
Nu da du ved, at navnet på ODS-tabellen er “FitStatistics”, skal du bruge ODS OUTPUT-destinationen til at skrive denne tabel til et SAS-datasæt som følger:
ods output FitStatistics=Output; /* navnet på datasættet er 'Output' */proc reg data=Sashelp.Cars plots=none; /* samme procedurekald */ model Horsepower = EngineSize Weight;quit; proc print data=Output noobs;run;
Opdatet fra PROC PRINT viser strukturen af output-datasættet. Bemærk, at datasættet ofte ser anderledes ud end den oprindeligt viste tabel. Datasættet indeholder kolonner, der ikke kan udskrives (som Model og Dependent), som ikke vises i den viste tabel. Datasættet indeholder også kolonner, der indeholder de rå numeriske værdier og de (formaterede) karakterværdier for statistikkerne. Kolonnerne cValue1 og nValue1 repræsenterer de samme oplysninger, bortset fra, at cValue1 er en tegnkolonne, mens nValue1 er en numerisk kolonne. Det samme gælder for kolonnerne cValue2 og nValue2. Karakterværdierne kan indeholde formaterede eller afrundede værdier.
Læs værdien af statistikken i en makrovariabel
Fra det foregående PROC PRINT-output kan du se, at den numeriske værdi af R-square-statistikken er i den første række og er i kolonnen nValue2. Du kan derfor læse og behandle denne værdi ved at bruge en standard WHERE-klausul. I f.eks. følgende udsagn bruges underprogrammet SYMPUTX til at oprette en makrovariabel, som indeholder værdien af R-square-statistikken:
data _null_;set Output;if Label2="R-Square" then call symputx("RSq", nValue2);run; %put RSq = &RSq;
RSq = 0.6201360929
SAS-loggen viser, at R-square-værdien nu er indeholdt i makrovariablen Rsq.
Lagring af statistikken i en makrovariabel er kun én måde at bruge datasættet på. Du kan også læse statistikken i PROC IML eller PROC SQL til yderligere beregning eller vise værdien af statistikken i en graf.
BY-group processing: Flere prøver og flere statistikker
De foregående afsnit viser, hvordan man gemmer en enkelt tabel til et SAS-datasæt. Det er lige så nemt at oprette et datasæt, der indeholder flere statistikker, én for hvert niveau i en BY-gruppeanalyse.
Sæt, at du vil køre flere regressioner, én for hver værdi af variablen Oprindelse, som har værdierne “Asien”, “Europa” og “USA”. Det følgende kald til PROC SORT sorterer dataene efter Origin-variablen. de sorterede data gemmes i CARS-datasættet.
proc sort data=Sashelp.Cars out=Cars; by Origin;run;
Du kan derefter angive Origin på BY-anvisningen i PROC REG for at udføre tre regressionsanalyser. Når du udfører en BY-gruppeanalyse, ønsker du måske ikke at se alle resultaterne vist på computerskærmen, især hvis dit mål er at gemme resultaterne i et uddatasæt. Du kan bruge ODS EXCLUDE-erklæringen til at undertrykke SAS-output.
ods exclude all; /* undertrykker tabeller til skærmen */ods output FitStatistics=Output2; /* 'Output2' indeholder resultater for hver BY-gruppe */proc reg data=Cars plots=none; by Origin; model Horsepower = EngineSize Weight;quit;ods exclude none; /* ikke længere undertrykke tabeller */ proc print data=Output2 noobs; where Label2="R-Square"; var Origin Label2 nValue2;run;
Opdatet fra PROC PRINT viser R-square-statistikkerne for hver model. Bemærk, at BY-gruppevariablerne (i dette tilfælde Origin) tilføjes til outputdatasættene, når du kører en BY-gruppeanalyse. Du kan nu bruge statistikkerne i programmer eller grafer.
Alternativer til brug af ODS OUTPUT
Nogle procedurer giver en alternativ mulighed for at oprette et outputdatasæt, der indeholder statistikker. Kontroller altid SAS-dokumentationen for at se, om proceduren indeholder en mulighed, der skriver almindelige statistikker til et uddatasæt. F.eks. står der i dokumentationen for PROC REG-erklæringen, at du kan bruge OUTEST=-indstillingen med RSQUARE-indstillingen for at få et uddatasæt, der indeholder parameterestimaterne og andre modelstatistikker som f.eks. R-square-værdien, så i dette eksempel behøver du ikke at bruge ODS OUTPUT-erklæringen til at dirigere FitStatistics-tabellen til et datasæt. I stedet kan du få statistikken på følgende måde:
proc reg data=Biler NOPRINT outest=Output3 RSQUARE; /* statistik i 'Output3' */ by Origin; model Hestekræfter = Motorstørrelse Vægt;quit; proc print data=Output3 noobs; format _RSQ_ 8.6; var Origin _RSQ_;run;
Summary
Sammenfattende giver ODS OUTPUT-erklæringen dig mulighed for at oprette et datasæt, der indeholder enhver statistik, der er produceret af en SAS-procedure. Du kan bruge ODS OUTPUT-erklæringen til at opfange en statistik og bruge den senere i dit program.