Blogok

A kezdetben a SAS által létrehozott eljárások és kimenetek. A kimenet alaktalan és üres volt. Aztán a SAS azt mondta: “Legyen ODS”, és lett ODS.” Az ügyfelek látták, hogy az ODS jó, és a SAS elválasztotta a számítást a kimenet megjelenítésétől és kezelésétől.”

Az előző bekezdés túlzottan leegyszerűsíti a SAS kimeneti kiadási rendszerét (ODS), de az igazság az, hogy az ODS a SAS egy erős funkciója. Az ODS segítségével SAS-táblákat és grafikákat küldhet különböző kimeneti célállomásokra, többek között HTML, PDF, RTF és PowerPoint formátumba. Szabályozhatja a kimenet stílusát és attribútumait, így testreszabott jelentést hozhat létre. Az ODS-ről több száz tanulmányt és könyvet írtak. Egy nagyon alapvető bevezető Olinger (2000) “ODS for Dummies.”

A statisztikai programozó számára a leghasznosabb célállomás az OUTPUT célállomás. Az OUTPUT célállomás egy táblázatot vagy grafikont küld egy SAS-adatkészlethez. Következésképpen a kimenet minden egyes eleméhez programozottan hozzáférhet.

Az előző kijelentés következményei monumentálisak. Nem tudom eléggé hangsúlyozni az OUTPUT célállomás fontosságát, ezért hadd mondjam el még egyszer:

Az ODS OUTPUT célállomással bármilyen SAS-eljárás által előállított értéket tárolhatunk. Ezt az értéket aztán egy SAS programmal kiolvashatja.

Az ODS OUTPUT célállomás egy gyakori kérdésre ad választ, amelyet új programozók tesznek fel a SAS vitafórumokon: “Hogyan kaphatok egy statisztikát egy adathalmazba vagy egy makrováltozóba?”. A lépések a következők:

  1. Az ODS TRACE ON (vagy a SAS dokumentáció) segítségével keresse meg annak az ODS táblának a nevét, amely a kívánt statisztikát tartalmazza.
  2. Az ODS OUTPUT utasítással adja meg a táblázat nevét és egy adathalmaz nevét. A szintaxis a következő: ODS OUTPUT TableName=DataSetName. Ezután futtassa az eljárást a táblázat létrehozásához.
  3. Olvassa be az adathalmazt, hogy megkapja a statisztika értékét.

Új a #SAS programozásban? Hogyan szerezhetünk bármilyen statisztikát egy adathalmazba. Click To Tweet

Keresd meg az ODS-tábla nevét

Tegyük fel például, hogy a PROC REG segítségével lineáris regressziót kívánsz végezni, és az R-négyzet értékét egy SAS-adatkészletben szeretnéd rögzíteni. Az eljárás dokumentációja felsorolja az összes ODS-táblát, amelyet az eljárás létrehozhat, vagy az ODS TRACE ON utasítással megjelenítheti a PROC REG által előállított táblák nevét. Az adatok a SAS-szal együtt terjesztett Sashelp.Cars adathalmaz 428 járművei:

ods trace on; /* ODS-táblák neveinek naplóba írása */proc reg data=Sashelp.Cars plots=none; model Horsepower = EngineSize Weight;quit;ods trace off; /* leállítja az írást a naplóba */

odsoutput1

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

A kimenetet megnézve látható, hogy a harmadik táblázat az R-négyzet értéket tartalmazza. A SAS naplót megnézve láthatjuk, hogy a harmadik táblázat neve “FitStatistics.”

A táblázat elmentése SAS-adatkészletbe

Most már tudja, hogy az ODS-tábla neve “FitStatistics”, használja az ODS OUTPUT rendeltetési helyet a táblázat SAS-adatkészletbe írásához az alábbiak szerint:

ods output FitStatistics=Output; /* az adatkészlet neve 'Output' */proc reg data=Sashelp.Cars plots=none; /* ugyanaz az eljáráshívás */ model Horsepower = EngineSize Weight;quit; proc print data=Output noobs;run;

odsoutput2

A PROC PRINT kimenete mutatja a kimeneti adathalmaz szerkezetét. Vegyük észre, hogy az adathalmaz gyakran másképp néz ki, mint az eredetileg megjelenített táblázat. Az adathalmaz olyan nem nyomtatható oszlopokat tartalmaz (például Model és Dependent), amelyek nem jelennek meg a megjelenített táblázatban. Az adathalmaz olyan oszlopokat is tartalmaz, amelyek a statisztikák nyers számértékeit és (formázott) karakteres értékeit tartalmazzák. A cValue1 és az nValue1 oszlopok ugyanazt az információt képviselik, azzal a különbséggel, hogy a cValue1 egy karakteres oszlop, míg az nValue1 egy numerikus oszlop. Ugyanez vonatkozik a cValue2 és nValue2 oszlopokra is. A karakteres értékek formázott vagy kerekített értékeket tartalmazhatnak.

A statisztika értékének beolvasása egy makrováltozóba

Az előző PROC PRINT kimenetéből látható, hogy az R-négyzet statisztika numerikus értéke az első sorban és az nValue2 oszlopban található. Ezt az értéket tehát egy szabványos WHERE záradék segítségével kiolvashatja és feldolgozhatja. A következő utasítások például a SYMPUTX szubrutin segítségével létrehoznak egy makrováltozót, amely az R-négyzet statisztika értékét tartalmazza:

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

RSq = 0.6201360929

A SAS naplója azt mutatja, hogy az R-négyzet értéket most az Rsq makrováltozó tartalmazza.

A statisztika makrováltozóban való tárolása csak az egyik módja az adathalmaz felhasználásának. A statisztikát további számításokhoz beolvashatjuk a PROC IML vagy a PROC SQL programba is, vagy megjeleníthetjük a statisztika értékét egy grafikonon.

BY-csoportos feldolgozás: Több minta és több statisztika

Az előző szakaszokban bemutattuk, hogyan menthetünk egyetlen táblázatot SAS-adatkészletbe. Ugyanilyen egyszerű olyan adathalmazt létrehozni, amely több statisztikát tartalmaz, egyet-egyet minden egyes szintre a BY-csoportos elemzésben.

Tegyük fel, hogy több regressziót szeretnénk lefuttatni, egyet-egyet az Origin változó minden egyes értékére, amely az “Asia”, “Europe” és “USA” értékeket tartalmazza. A PROC SORT következő hívása az adatokat az Origin változó szerint rendezi.A rendezett adatokat a CARS adathalmazban tárolja.

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

Ezután a PROC REG programban a BY utasításban megadhatja az Origin-t, hogy három regressziós elemzést végezzen. Amikor BY-csoportos elemzést futtat, előfordulhat, hogy nem szeretné az összes eredményt látni a számítógép képernyőjén, különösen akkor, ha az a célja, hogy az eredményeket egy kimeneti adatkészletbe mentse. Az ODS EXCLUDE utasítással elnyomhatja a SAS kimenetét.

ods exclude all; /* a képernyőn megjelenő táblázatok elnyomása */ods output FitStatistics=Output2; /* az 'Output2' tartalmazza az egyes BY csoportok eredményeit */proc reg data=Cars plots=none; by Origin; model Horsepower = EngineSize Weight;quit;ods exclude none; /* többé nem nyomja el a táblázatokat */ proc print data=Output2 noobs; where Label2="R-négyzet"; var Origin Label2 nValue2;run;

odsoutput3

A PROC PRINT kimenete az egyes modellek R-négyzet statisztikáit mutatja. Vegyük észre, hogy a BY-csoportváltozók (ebben az esetben az Origin) hozzáadódnak a kimeneti adathalmazokhoz, amikor BY-csoportos elemzést futtatunk. A statisztikákat most már felhasználhatja programokban vagy grafikonokban.

Az ODS OUTPUT használatának alternatívái

Néhány eljárás alternatív lehetőséget biztosít a statisztikákat tartalmazó kimeneti adathalmaz létrehozására. Mindig ellenőrizze a SAS dokumentációjában, hogy az eljárás biztosít-e olyan opciót, amely általános statisztikákat ír egy kimeneti adathalmazba. Például a PROC REG utasítás dokumentációja szerint az OUTEST= opciót az RSQUARE opcióval együtt használva olyan kimeneti adathalmazt kaphatunk, amely tartalmazza a paraméterbecsléseket és más modellstatisztikákat, például az R-négyzet értéket. így ebben a példában nem kell az ODS OUTPUT utasítással a FitStatistics táblát egy adathalmazba irányítani. Ehelyett a statisztikát a következőképpen kaphatja meg:

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

odsoutput4

Összefoglaló

Az ODS OUTPUT utasítással olyan adathalmazt hozhatunk létre, amely bármilyen SAS-eljárás által előállított statisztikát tartalmaz. Az ODS OUTPUT utasítással rögzíthet egy statisztikát, és később felhasználhatja azt a programjában.

Címkék Kezdő lépések

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.