最初、SASはプロシージャと出力を作成しました。 出力は形がなく、空虚なものでした。 顧客は ODS が優れていることを理解し、SAS は計算を出力の表示と管理から分離しました。
前項は SAS 出力配信システム (ODS) を単純化しすぎましたが、実際は ODS が SAS の強力な機能であることは事実です。 ODS を使用して、SAS テーブルおよびグラフィックを HTML、PDF、RTF、および PowerPoint などのさまざまな出力先に送信することができます。 出力のスタイルや属性を制御できるので、カスタマイズされたレポートを作成することができます。 ODSについては、これまで何百もの論文や書籍が書かれています。 非常に基本的な紹介はOlinger (2000) “ODS for Dummies “です。
統計プログラマーにとって、最も有用な出力先はOUTPUT先です。 OUTPUT先は、SASデータセットに表やグラフを送ります。 その結果、出力の各要素にプログラム的にアクセスすることができます。
前の文の意味するところは、記念碑的なものです。 OUTPUT宛先の重要性はいくら強調してもし過ぎることはないので、もう一度言います。
ODSのOUTPUT宛先では、任意のSASプロシージャによって生成される任意の値を保存することができます。
ODS OUTPUT 目的地は、SAS ディスカッション フォーラムで新しいプログラマーからよく聞かれる質問に答えています。 “どのようにデータセットまたはマクロ変数に統計値を取得できますか?”
- ODS TRACE ON(またはSASドキュメント)を使用して、必要な統計値を含むODSテーブルの名前を見つけます。
- テーブル名とデータセット名を指定するためにODS OUTPUTステートメントを使用します。 構文は、ODS OUTPUT TableName=DataSetName です。 次に、テーブルを生成するプロシージャを実行します。
- データセットを読み込んで、統計量の値を取得します。
#SASプログラミングは初めてですか? データセットに任意の統計量を取得する方法。 Click To Tweet
ODSテーブルの名前を見つける
例として、PROC REGを使って線形回帰を行うつもりで、SASデータセットにR二乗の値を取り込みたいとします。 プロシージャのドキュメントには、プロシージャが作成できるすべてのODSテーブルがリストされています。または、ODS TRACE ONステートメントを使用して、PROC REGが作成するテーブル名を表示することも可能です。 データはSASで配布されているSashelp.Carsデータセットの428台です。
ods trace on; /* ODSテーブル名をログに書き込む */proc reg data=Sashelp.Cars データセットに含まれる428台の車両です。Cars plots=none; model Horsepower = EngineSize Weight;quit;ods trace off; /* ログへの書き込みを止める */
Output Added:-------------Name.Sashelp: FitStatisticsLabel: Fit StatisticsTemplate: Stat.REG.FitStatisticsPath: Reg.MODEL1.Fit.Horsepower.FitStatistics-------------
出力を見てみると、3番目のテーブルにR二乗の値が含まれていることが分かります。 SASログを見ると、3つ目のテーブルの名前が “FitStatistics “であることがわかります。”
テーブルをSASデータセットに保存する
ODSテーブルの名前が「FitStatistics」であることがわかったので、次のようにODS OUTPUT先を使用してそのテーブルをSASデータセットに書き込みます:
ods output FitStatistics=Output; /* データセット名は「出力」 */proc reg data=Sashelp.Data=Sashelp.Output; /* データセット名は「出力」 */proc reg data=Sashelp.Data=Sashelp.Output; /* データセット名は「出力」 */proc reg data=Sashelp.Data=Sashelp.Output; /* データセット名は「出力」。Cars plots=none; /* 同じプロシージャの呼び出し */ model Horsepower = EngineSize Weight;quit; proc print data=Output noobs;run;
Proc PRINTからの出力は出力データセットの構造を示しています。 データセットは、しばしば元の表示された表とは異なるように見えることに注意してください。 データセットには、表示されたテーブルには表示されない非印刷列(モデルや依存関係など)が含まれています。 データセットには、統計の生の数値と(フォーマットされた)文字値を含む列も含まれています。 cValue1 と nValue1 の列は、cValue1 が文字列であるのに対し、nValue1 が数値列であることを除いて、同じ情報を表しています。 cValue2 と nValue2 の列も同様である。 文字値には、フォーマットされた値や丸められた値が含まれる場合があります。
統計量の値をマクロ変数に読み込む
前のPROC PRINT出力から、R二乗統計量の数値は最初の行にあり、nValue2列にあることがわかります。 したがって、標準的なWHERE句を使用して、その値を読み込んで処理することができます。 例えば、次のステートメントでは、SYMPUTXサブルーチンを使用して、R二乗統計量の値を含むマクロ変数を作成しています。
data _null_;set Output;if Label2="R-Square" then call symputx("RSq", nValue2);run; %put RSq = &RSq;
RSq = 0.1.6201360929
SAS log は、R 二乗値が現在 Rsq マクロ変数に含まれていることを示しています。
マクロ変数に統計量を格納することは、データセットを使用する 1 つの方法だけです。 さらに計算するために PROC IML または PROC SQL に統計量を読み込んだり、統計量の値をグラフで表示することもできます。
BY-group processing: 複数のサンプルと複数の統計量
これまでのセクションでは、1つのテーブルをSASデータセットに保存する方法を示しました。 BY-group分析の各レベルに1つずつ、複数の統計量を含むデータセットを作成することも同様に簡単です。
値 “Asia”, “Europe”, “USA” を持つ Origin 変数の各値について、複数の回帰を実行したいと仮定します。 PROC SORTの次の呼び出しは、Origin変数でデータをソートします。ソートされたデータはCARSデータセットに格納されます。
proc sort data=Sashelp.Cars out=Cars; by Origin;run;
その後、PROC REGのBY文でOriginを指定して、3回帰分析を実行することが可能です。 BY-グループ分析を実行する際、特に結果を出力データセットに保存することが目的であれば、コンピュータの画面に表示される全ての結果を見たくないかもしれません。 ODS EXCLUDEステートメントを使用すると、SAS出力を抑制することができます。
ods exclude all; /* テーブルを画面に出さない */ods output FitStatistics=Output2; /* 'Output2' contains results for each BY group */proc reg data=Cars plots=none; by Origin; model Horsepower = EngineSize Weight;quit.ODS EXCLUDE statement; /* 'Output2' の結果を画面に出さない。ods exclude none; /* テーブルを抑制しなくなった */ proc print data=Output2 noobs; where Label2="R-Square"; var Origin Label2 nValue2;run;
Proc PRINTからの出力は、各モデルのR二乗統計量を示しています。 BY-グループ分析を実行すると、BY-グループ変数(この場合、Origin)が出力データセットに追加されることに注意してください。 5347>
ODS OUTPUTを使用する代替方法
いくつかのプロシージャーは、統計情報を含む出力データセットを作成するための代替オプションを提供しています。 プロシージャが出力データセットに一般的な統計情報を書き込むオプションを提供しているかどうか、常にSASのドキュメントを確認してください。 例えば、PROC REG ステートメントのドキュメントでは、OUTEST= オプションと RSQUARE オプションを使用して、パラメータ推定値と R 二乗値などの他のモデル統計値を含む出力データセットを取得することができると記載されています。 その代わりに、以下のように統計量を得ることができます:
proc reg data=Cars NOPRINT outest=Output3 RSQUARE; /* 'Output3' の統計量 */ by Origin; model Horsepower = EngineSize Weight;quit; proc print data=Output3 noobs; format _RSQ_ 8.0.0.1.6; var Origin _RSQ_;run;
Summary
要約すると、ODS OUTPUT文は、SASプロシージャによって生成される任意の統計量を含むデータセットを作成できるようにするものである。 ODS OUTPUTステートメントを使用して統計値をキャプチャし、後でプログラムでそれを使用することができます