Bloggar

I början skapade SAS procedurer och utdata. Utgången var formlös och tom. Sedan sa SAS: ”Let there be ODS”, och det blev ODS. kunderna såg att ODS var bra, och SAS separerade beräkningen från visning och hantering av utdata.

Det föregående stycket förenklar SAS Output Delivery System (ODS) för mycket, men sanningen är att ODS är en kraftfull funktion i SAS. Du kan använda ODS för att skicka SAS tabeller och grafik till olika utdatadestinationer, inklusive HTML, PDF, RTF och PowerPoint. Du kan styra stilen och attributen för utdata och på så sätt skapa en skräddarsydd rapport. Det har skrivits hundratals artiklar och böcker om ODS. En mycket grundläggande introduktion är Olinger (2000) ”ODS for Dummies.”

För en statistisk programmerare är den mest användbara destinationen OUTPUT destinationen. OUTPUT-destinationen skickar en tabell eller ett diagram till en SAS-datamängd. Följaktligen kan du programmeringsmässigt få tillgång till varje element i utdata.

Förra påståendet har en monumental betydelse. Jag kan inte nog understryka betydelsen av OUTPUT-destinationen, så låt mig säga det igen:

ODS OUTPUT-destinationen gör det möjligt för dig att lagra alla värden som produceras av en SAS-procedur. Du kan sedan läsa det värdet med hjälp av ett SAS-program.

ODS OUTPUT-destinationen svarar på en vanlig fråga som ställs av nya programmerare på SAS-diskussionsforum: ”Hur kan jag få in en statistik i en datamängd eller i en makrovariabel?” Stegen är följande:

  1. Använd ODS TRACE ON (eller SAS-dokumentationen) för att hitta namnet på den ODS-tabell som innehåller den statistik du vill ha.
  2. Använd ODS OUTPUT-angivelsen för att ange tabellens namn och ett datamängdsnamn. Syntaxen är ODS OUTPUT TableName=DataSetName. Kör sedan proceduren för att generera tabellen.
  3. Läs datamängden för att få fram värdet på statistiken.

Är du ny i #SAS-programmering? Hur man får in vilken statistik som helst i en datamängd. Click To Tweet

Hitta namnet på ODS-tabellen

Såsom exempel kan du anta att du tänker använda PROC REG för att utföra en linjär regression och att du vill fånga R-square-värdet i en SAS-datauppsättning. Dokumentationen för proceduren listar alla ODS-tabeller som proceduren kan skapa, eller så kan du använda ODS TRACE ON-anvisningen för att visa de tabellnamn som produceras av PROC REG. Data är de 428 fordonen i datasetet Sashelp.Cars, som distribueras med SAS:

ods trace on; /* write ODS table names to log */proc reg data=Sashelp.Cars plots=none; model Horsepower = EngineSize Weight;quit;ods trace off; /* sluta skriva till loggen */

odsoutput1

Output Added:-------------Name: FitStatisticsLabel: FitStatistics: Fit StatisticsMall: Stat.REG.FitStatisticsPath: Reg.MODEL1.Fit.Horsepower.FitStatistics-------------

Om man tittar på resultatet kan man se att den tredje tabellen innehåller R-square-värdet. Genom att titta på SAS-loggen kan du se att namnet på den tredje tabellen är ”FitStatistics.”

Spara tabellen till en SAS-datauppsättning

Nu när du vet att namnet på ODS-tabellen är ”FitStatistics” använder du ODS OUTPUT-destinationen för att skriva tabellen till en SAS-datauppsättning enligt följande:

ods output FitStatistics=Output; /* datauppsättningens namn är 'Output' */proc reg data=Sashelp.Cars plots=none; /* samma proceduranrop */ model Horsepower = EngineSize Weight;quit; proc print data=Output noobs;run;

odsoutput2

Utgången från PROC PRINT visar strukturen på datamängden för utdata. Lägg märke till att datamängden ofta ser annorlunda ut än den ursprungliga tabellen som visas. Datamängden innehåller kolumner som inte kan skrivas ut (t.ex. Model och Dependent) och som inte finns med i den visade tabellen. Datamängden innehåller också kolumner som innehåller statistikens råa numeriska värden och (formaterade) teckenvärden. Kolumnerna cValue1 och nValue1 representerar samma information, förutom att cValue1 är en teckenkolumn medan nValue1 är en numerisk kolumn. Samma sak gäller för kolumnerna cValue2 och nValue2. Teckenvärdena kan innehålla formaterade eller avrundade värden.

Läs värdet av statistiken i en makrovariabel

Från föregående PROC PRINT-utgång kan du se att det numeriska värdet av R-kvadrat-statistiken finns i den första raden och i kolumnen nValue2. Du kan därför läsa och bearbeta det värdet genom att använda en vanlig WHERE-klausul. I följande uttalanden används till exempel underrutinen SYMPUTX för att skapa en makrovariabel som innehåller värdet av R-square-statistiken:

data _null_;set Output;if Label2="R-Square" then call symputx("RSq", nValue2);run; %put RSq = &RSq;

RSq = 0.6201360929

SAS-loggen visar att R-kvadratvärdet nu finns i makrovariabeln Rsq.

Lagring av statistiken i en makrovariabel är bara ett sätt att använda datamängden. Du kan också läsa in statistiken i PROC IML eller PROC SQL för ytterligare beräkningar, eller visa statistikens värde i ett diagram.

By-group processing: Flera prover och flera statistiska uppgifter

De föregående avsnitten visar hur man sparar en enda tabell till en SAS-datamängd. Det är lika enkelt att skapa en datamängd som innehåller flera statistiska uppgifter, en för varje nivå i en BY-gruppsanalys.

Antag att du vill köra flera regressioner, en för varje värde av variabeln Origin, som har värdena ”Asia”, ”Europe” och ”USA”. Följande anrop till PROC SORT sorterar uppgifterna efter variabeln Origin De sorterade uppgifterna lagras i CARS-datamängden.

proc sort data=Sashelp.Cars out=Cars; by Origin;run;

Du kan sedan ange Origin på BY-angivelsen i PROC REG för att utföra tre regressionsanalyser. När du kör en BY-gruppanalys kanske du inte vill se alla resultat som visas på datorskärmen, särskilt om ditt mål är att spara resultaten i en utdatamängd. Du kan använda ODS EXCLUDE-anvisningen för att undertrycka SAS-utdata.

ods exclude all; /* undertrycker tabeller till skärmen */ods output FitStatistics=Output2; /* 'Output2' innehåller resultat för varje BY-grupp */proc reg data=Cars plots=none; by Origin; model Horsepower = EngineSize Weight;quit;ods exclude none; /* inte längre undertrycka tabeller */ proc print data=Output2 noobs; where Label2="R-Square"; var Origin Label2 nValue2;run;

odsoutput3

Uppgiften från PROC PRINT visar statistiken för R-square för varje modell. Lägg märke till att BY-gruppvariablerna (i det här fallet Origin) läggs till i utdatauppsättningarna när du kör en BY-gruppanalys. Du kan nu använda statistiken i program eller grafer.

Alternativ till att använda ODS OUTPUT

Vissa procedurer ger ett alternativt alternativ för att skapa en utdatamängd som innehåller statistik. Kontrollera alltid SAS-dokumentationen för att se om proceduren tillhandahåller ett alternativ som skriver vanlig statistik till en utdatamängd. I dokumentationen för PROC REG-anvisningen står det till exempel att du kan använda alternativet OUTEST= med alternativet RSQUARE för att få en utdatauppsättning som innehåller parameterskattningar och annan modellstatistik, t.ex. R-kvadratvärdet.I det här exemplet behöver du alltså inte använda ODS OUTPUT-anvisningen för att styra FitStatistics-tabellen till en datauppsättning. Istället kan du få fram statistiken på följande sätt:

proc reg data=Cars NOPRINT outest=Output3 RSQUARE; /* statistik i 'Output3' */ by Origin; model Horsepower = EngineSize Weight;quit; proc print data=Output3 noobs; format _RSQ_ 8.6; var Origin _RSQ_;run;

odsoutput4

Sammanfattning

Sammanfattningsvis gör ODS OUTPUT-anvisningen det möjligt att skapa en datamängd som innehåller vilken statistik som helst som produceras av en SAS-procedur. Du kan använda ODS OUTPUT-anvisningen för att fånga upp en statistik och använda den senare i ditt program.

Taggar Komma igång

Lämna ett svar

Din e-postadress kommer inte publiceras.