Blogs

In den Anfängen von SAS wurden Prozeduren und Ausgaben erzeugt. Die Ausgabe war formlos und nichtig. Die Kunden sahen, dass ODS gut war, und SAS trennte die Berechnung von der Anzeige und Verwaltung der Ausgabe.

Der vorangehende Absatz vereinfacht das SAS Output Delivery System (ODS) zu stark, aber die Wahrheit ist, dass ODS eine leistungsstarke Funktion von SAS ist. Sie können ODS verwenden, um SAS-Tabellen und -Grafiken an verschiedene Ausgabeziele zu senden, darunter HTML, PDF, RTF und PowerPoint. Sie können den Stil und die Attribute der Ausgabe steuern und so einen individuellen Bericht erstellen. Es wurden Hunderte von Artikeln und Büchern über ODS geschrieben. Eine sehr grundlegende Einführung ist Olinger (2000) „ODS for Dummies“

Das nützlichste Ziel für einen Statistikprogrammierer ist das OUTPUT-Ziel. Die OUTPUT-Destination sendet eine Tabelle oder ein Diagramm an einen SAS-Datensatz. Somit kann man programmatisch auf jedes Element der Ausgabe zugreifen.

Die Auswirkungen der vorherigen Aussage sind gewaltig. Ich kann die Bedeutung der OUTPUT-Destination gar nicht hoch genug einschätzen, also lassen Sie es mich noch einmal sagen:

Die ODS OUTPUT-Destination ermöglicht es Ihnen, jeden Wert zu speichern, der von einer SAS-Prozedur erzeugt wird. Sie können diesen Wert dann mit einem SAS-Programm lesen.

Die ODS OUTPUT-Destination beantwortet eine häufige Frage, die von neuen Programmierern in SAS-Diskussionsforen gestellt wird: „Wie kann ich eine Statistik in einen Datensatz oder in eine Makrovariable bekommen?“ Die Schritte sind wie folgt:

  1. Verwenden Sie ODS TRACE ON (oder die SAS-Dokumentation), um den Namen der ODS-Tabelle zu finden, die die gewünschte Statistik enthält.
  2. Verwenden Sie die ODS OUTPUT-Anweisung, um den Tabellennamen und einen Datensatznamen anzugeben. Die Syntax lautet ODS OUTPUT TableName=DataSetName. Führen Sie dann die Prozedur aus, um die Tabelle zu erzeugen.
  3. Lesen Sie den Datensatz, um den Wert der Statistik zu erhalten.

Neu in der #SAS-Programmierung? Wie man eine beliebige Statistik in einen Datensatz bekommt. Click To Tweet

Finden Sie den Namen der ODS-Tabelle

Angenommen, Sie wollen mit PROC REG eine lineare Regression durchführen und den R-Quadrat-Wert in einem SAS-Datensatz erfassen. Die Dokumentation der Prozedur listet alle ODS-Tabellen auf, die die Prozedur erstellen kann, oder Sie können die Anweisung ODS TRACE ON verwenden, um die Tabellennamen anzuzeigen, die von PROC REG erzeugt werden. Die Daten sind die 428 Fahrzeuge im Sashelp.Cars Datensatz, der mit SAS verteilt wird:

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

odsoutput1

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

Bei Betrachtung der Ausgabe können Sie sehen, dass die dritte Tabelle den R-Quadrat-Wert enthält. Ein Blick in das SAS-Protokoll zeigt, dass der Name der dritten Tabelle „FitStatistics“ lautet.“

Speichern Sie die Tabelle in einem SAS-Datensatz

Nun, da Sie wissen, dass der Name der ODS-Tabelle „FitStatistics“ lautet, verwenden Sie das ODS-Ziel OUTPUT, um diese Tabelle wie folgt in einen SAS-Datensatz zu schreiben:

ods output FitStatistics=Output; /* der Name des Datensatzes ist 'Output' */proc reg data=Sashelp.Cars plots=none; /* same procedure call */ model Horsepower = EngineSize Weight;quit; proc print data=Output noobs;run;

odsoutput2

Die Ausgabe von PROC PRINT zeigt die Struktur des Ausgabedatensatzes. Beachten Sie, dass der Datensatz oft anders aussieht als die ursprünglich angezeigte Tabelle. Der Datensatz enthält nicht druckbare Spalten (wie Modell und Abhängige), die in der angezeigten Tabelle nicht erscheinen. Der Datensatz enthält auch Spalten, die die numerischen Rohwerte und die (formatierten) Zeichenwerte der Statistiken enthalten. Die Spalten cValue1 und nValue1 stellen dieselben Informationen dar, mit der Ausnahme, dass cValue1 eine Zeichenspalte ist, während nValue1 eine numerische Spalte ist. Das Gleiche gilt für die Spalten cValue2 und nValue2. Die Zeichenwerte können formatierte oder gerundete Werte enthalten.

Lesen Sie den Wert der Statistik in eine Makrovariable

Aus der vorherigen PROC PRINT-Ausgabe können Sie ersehen, dass der numerische Wert der R-Quadrat-Statistik in der ersten Zeile und in der Spalte nValue2 steht. Sie können diesen Wert daher mit einer Standard-WHERE-Klausel lesen und verarbeiten. Die folgenden Anweisungen verwenden beispielsweise die Unterroutine SYMPUTX, um eine Makrovariable zu erstellen, die den Wert der R-Quadrat-Statistik enthält:

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

RSq = 0.6201360929

Das SAS-Protokoll zeigt, dass der R-Quadrat-Wert jetzt in der Makrovariablen Rsq enthalten ist.

Das Speichern der Statistik in einer Makrovariablen ist nur eine Möglichkeit, den Datensatz zu verwenden. Sie könnten die Statistik auch in PROC IML oder PROC SQL für weitere Berechnungen einlesen oder den Wert der Statistik in einem Diagramm anzeigen.

By-group processing: Mehrere Stichproben und mehrere Statistiken

Die vorherigen Abschnitte zeigen, wie man eine einzelne Tabelle in einem SAS-Datensatz speichert. Es ist genauso einfach, einen Datensatz zu erstellen, der mehrere Statistiken enthält, eine für jede Ebene in einer BY-Gruppenanalyse.

Angenommen, Sie möchten mehrere Regressionen durchführen, eine für jeden Wert der Variable Herkunft, die die Werte „Asien“, „Europa“ und „USA“ hat. Der folgende Aufruf von PROC SORT sortiert die Daten nach der Herkunftsvariable, und die sortierten Daten werden im CARS-Datensatz gespeichert.

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

Sie können dann Origin in der BY-Anweisung in PROC REG angeben, um drei Regressionsanalysen durchzuführen. Wenn Sie eine BY-Gruppenanalyse durchführen, möchten Sie vielleicht nicht alle Ergebnisse auf dem Computerbildschirm sehen, insbesondere wenn Sie die Ergebnisse in einem Ausgabedatensatz speichern möchten. Sie können die ODS EXCLUDE-Anweisung verwenden, um die SAS-Ausgabe zu unterdrücken.

ods exclude all; /* Tabellen auf dem Bildschirm unterdrücken */ods output FitStatistics=Output2; /* 'Output2' enthält Ergebnisse für jede BY-Gruppe */proc reg data=Cars plots=none; by Origin; model Horsepower = EngineSize Weight;quit;ods exclude none; /* Tabellen nicht mehr unterdrücken */ proc print data=Output2 noobs; where Label2="R-Quadrat"; var Origin Label2 nValue2;run;

odsoutput3

Die Ausgabe von PROC PRINT zeigt die R-Quadrat-Statistik für jedes Modell. Beachten Sie, dass die BY-Gruppenvariablen (in diesem Fall Herkunft) zu den Ausgabedatensätzen hinzugefügt werden, wenn Sie eine BY-Gruppenanalyse durchführen. Sie können nun die Statistiken in Programmen oder Diagrammen verwenden.

Alternativen zur Verwendung von ODS OUTPUT

Einige Prozeduren bieten eine alternative Option zur Erstellung eines Ausgabedatensatzes, der Statistiken enthält. Überprüfen Sie immer die SAS-Dokumentation, um zu sehen, ob die Prozedur eine Option bietet, die allgemeine Statistiken in einen Ausgabedatensatz schreibt. In der Dokumentation zur PROC REG-Anweisung heißt es beispielsweise, dass Sie die Option OUTEST= mit der Option RSQUARE verwenden können, um einen Ausgabedatensatz zu erhalten, der die Parameterschätzungen und andere Modellstatistiken wie den R-Quadrat-Wert enthält. Stattdessen können Sie die Statistik wie folgt erhalten:

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

odsoutput4

Zusammenfassung

Zusammenfassend lässt sich sagen, dass Sie mit der ODS OUTPUT-Anweisung einen Datensatz erstellen können, der eine beliebige Statistik enthält, die von einer SAS-Prozedur erzeugt wird. Sie können die ODS OUTPUT-Anweisung verwenden, um eine Statistik zu erfassen und sie später in Ihrem Programm zu verwenden.

Tags Erste Schritte

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.