La început, SAS a creat proceduri și ieșiri. Ieșirea era lipsită de formă și nulă. Apoi SAS a spus: „Să fie ODS”, și a existat ODS. clienții au văzut că ODS era bun, iar SAS a separat calculul de afișarea și gestionarea ieșirii.
Pragmentul precedent simplifică prea mult Sistemul de livrare a ieșirii SAS (ODS), dar adevărul este că ODS este o caracteristică puternică a SAS. Puteți utiliza ODS pentru a trimite tabele și grafice SAS către diverse destinații de ieșire, inclusiv HTML, PDF, RTF și PowerPoint. Puteți controla stilul și atributele de ieșire, creând astfel un raport personalizat. S-au scris sute de lucrări și cărți despre ODS. O introducere foarte elementară este Olinger (2000) „ODS for Dummies.”
Pentru un programator statistic, cea mai utilă destinație este destinația OUTPUT. Destinația OUTPUT trimite un tabel sau un grafic la un set de date SAS. În consecință, puteți accesa în mod programatic fiecare element al ieșirii.
Implicațiile afirmației anterioare sunt monumentale. Nu pot exagera importanța destinației OUTPUT, așa că permiteți-mi să o spun din nou:
Destinația ODS OUTPUT vă permite să stocați orice valoare care este produsă de orice procedură SAS. Puteți citi apoi acea valoare folosind un program SAS.
Destinația ODS OUTPUT răspunde la o întrebare frecventă care este pusă de programatorii noi pe forumurile de discuții SAS: „Cum pot obține o statistică într-un set de date sau într-o variabilă macro?”. Pașii sunt următorii:
- Utilizați ODS TRACE ON (sau documentația SAS) pentru a găsi numele tabelului ODS care conține statistica pe care o doriți.
- Utilizați instrucțiunea ODS OUTPUT pentru a specifica numele tabelului și numele unui set de date. Sintaxa este ODS OUTPUT TableName=DataSetName. Apoi rulați procedura pentru a genera tabelul.
- Citiți setul de date pentru a obține valoarea statisticii.
Nou în programarea #SAS? Cum să obțineți orice statistică într-un set de date. Click To Tweet
Căutați numele tabelului ODS
Ca exemplu, să presupunem că intenționați să utilizați PROC REG pentru a efectua o regresie liniară și doriți să capturați valoarea R-square într-un set de date SAS. Documentația pentru procedură enumeră toate tabelele ODS pe care procedura le poate crea sau puteți utiliza instrucțiunea ODS TRACE ON pentru a afișa numele tabelelor care sunt produse de PROC REG. Datele sunt cele 428 de vehicule din setul de date Sashelp.Cars, care este distribuit împreună cu 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; /* oprește scrierea în jurnal */
Output Added:-------------Name: FitStatisticsLabel: Fit StatisticsTemplate: Stat.REG.FitStatisticsPath: Reg.MODEL1.Fit.Horsepower.FitStatistics-------------
Urmărind ieșirea, puteți vedea că al treilea tabel conține valoarea R pătrat. Dacă vă uitați la jurnalul SAS, puteți vedea că numele celui de-al treilea tabel este „FitStatistics.”
Salvați tabelul într-un set de date SAS
Acum că știți că numele tabelului ODS este „FitStatistics”, utilizați destinația ODS OUTPUT pentru a scrie acel tabel într-un set de date SAS, după cum urmează:
ods output FitStatistics=Output; /* numele setului de date este 'Output' */proc reg data=Sashelp.Cars plots=none; /* același apel de procedură */ model Horsepower = EngineSize Weight;quit; proc print data=Output noobs;run;
Lovitura din PROC PRINT arată structura setului de date de ieșire. Observați că setul de date are adesea un aspect diferit față de tabelul afișat inițial. Setul de date conține coloane care nu se tipăresc (cum ar fi Model și Dependent) care nu apar în tabelul afișat. Setul de date conține, de asemenea, coloane care conțin valorile numerice brute și valorile caracterelor (formatate) ale statisticilor. Coloanele cValue1 și nValue1 reprezintă aceleași informații, cu excepția faptului că cValue1 este o coloană de caractere, în timp ce nValue1 este o coloană numerică. Același lucru este valabil și pentru coloanele cValue2 și nValue2. Valorile de caractere pot conține valori formatate sau rotunjite.
Citește valoarea statisticii într-o variabilă macro
Din ieșirea PROC PRINT anterioară, puteți vedea că valoarea numerică a statisticii R-square se află în primul rând și este în coloana nValue2. Prin urmare, puteți citi și procesa această valoare utilizând o clauză WHERE standard. De exemplu, următoarele instrucțiuni utilizează subrutina SYMPUTX pentru a crea o variabilă macro care conține valoarea statisticii R-square:
data _null_;set Output;if Label2="R-Square" then call symputx("RSq", nValue2);run; %put RSq = &RSq;
RSq = 0.6201360929
Logul SAS arată că valoarea R pătrat este acum conținută în variabila macro Rsq.
Stocarea statisticii într-o variabilă macro este doar un mod de utilizare a setului de date. Ați putea, de asemenea, să citiți statisticile în PROC IML sau PROC SQL pentru calcule ulterioare, sau să arătați valoarea statisticii într-un grafic.
Procesare pe grupuri: Eșantioane multiple și statistici multiple
Secțiunile anterioare arată cum să salvați un singur tabel într-un set de date SAS. Este la fel de ușor să creați un set de date care să conțină mai multe statistici, câte una pentru fiecare nivel într-o analiză BY-group.
Să presupunem că doriți să executați mai multe regresii, câte una pentru fiecare valoare a variabilei Origine, care are valorile „Asia”, „Europa” și „SUA”. Următorul apel la PROC SORT sortează datele în funcție de variabila Origine.Datele sortate sunt stocate în setul de date CARS.
proc sort data=Sashelp.Cars out=Cars; by Origin;run;
Puteți apoi specifica Origin în instrucțiunea BY din PROC REG pentru a efectua trei analize de regresie. Atunci când executați o analiză BY-grup, este posibil să nu doriți să vedeți toate rezultatele afișate pe ecranul computerului, mai ales dacă obiectivul dvs. este de a salva rezultatele într-un set de date de ieșire. Puteți utiliza instrucțiunea ODS EXCLUDE pentru a suprima ieșirea SAS.
ods exclude all; /* suprimă tabelele de pe ecran */ods output FitStatistics=Output2; /* 'Output2' conține rezultatele pentru fiecare grup BY */proc reg data=Cars plots=none; by Origin; model Horsepower = EngineSize Weight;quit;ods exclude none; /* nu mai suprimă tabelele */ proc print data=Output2 noobs; where Label2="R-Square"; var Origin Label2 nValue2;run;
Lovitura din PROC PRINT arată statisticile R-Square pentru fiecare model. Observați că variabilele BY-grup (în acest caz, Origin) sunt adăugate la seturile de date de ieșire atunci când executați o analiză BY-grup. Acum puteți utiliza statisticile în programe sau grafice.
Alternative la utilizarea ODS OUTPUT
Câteva proceduri oferă o opțiune alternativă pentru crearea unui set de date de ieșire care conține statistici. Verificați întotdeauna documentația SAS pentru a vedea dacă procedura oferă o opțiune care scrie statistici comune într-un set de date de ieșire. De exemplu, documentația pentru instrucțiunea PROC REG precizează că puteți utiliza opțiunea OUTEST= cu opțiunea RSQUARE pentru a obține un set de date de ieșire care conține estimările parametrilor și alte statistici ale modelului, cum ar fi valoarea pătratului R. Astfel, pentru acest exemplu, nu este necesar să utilizați instrucțiunea ODS OUTPUT pentru a direcționa tabelul FitStatistics către un set de date. În schimb, puteți obține statistica după cum urmează:
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;
Summary
În rezumat, instrucțiunea ODS OUTPUT vă permite să creați un set de date care să conțină orice statistică produsă de o procedură SAS. Puteți utiliza instrucțiunea ODS OUTPUT pentru a capta o statistică și a o utiliza ulterior în programul dumneavoastră.
.