2016年9月2日金曜日

PROC DOCUMENT による出力結果の再構築 【その2:部分的な再出力】




以下記事でやったことを、DOCUMENTプロシジャでも再現してみます。
集計結果から必要なものだけ表示する 【ODS SELECT編】



Step1. プロシジャの結果を保存

ods results off;
ods document name=WORK.MYDOC1(write);

proc univariate data=sashelp.class;
    var age;
run;

ods document close;
ods results on;

・ 「ODS RESULTS」で結果ビューアへの出力を抑制
・ 「ODS DOCUMENT」でUNIVARIATEプロシジャの結果(ODSオブジェクト)を保存




Step2. ODSオブジェクトの構造を確認する

proc document name=WORK.MYDOC1;
    list / levels=all ;
    run;
quit;

・ DOCUMENTプロシジャの「LISTステートメント」で、先程保存したODSオブジェクトの構造を結果ビューアに出力しています。
ここで表示される「パス」が重要になってきます。


以下のようにDETAILSオプションもつけると、更に詳細な構造を表示できます。

proc document name=WORK.MYDOC1;
    list / levels=all details;
    run;
quit;




Step3. 必要な集計結果だけ表示する


今回はUNIVARIATEプロシジャの結果から、「モーメント」と「基本統計量」だけに絞って表示したいとします。
まず上のリストから「モーメント」と「基本統計量」の「パス」をコピーするなり覚えておくなりして、以下のようにREPLAYステートメントでそのパスを列挙してやります。

proc document name=WORK.MYDOC1;
    replay \Univariate#1\Age#1\Moments#1 ,
             \Univariate#1\Age#1\BasicMeasures#1 ;
    run;
quit;

見事、結果を絞る事ができました!



ちなみにもっと楽な書き方もあります。
以下茶色で囲ったオブジェクトの名前を覚えておき、




以下のようにWHEREで対象のオブジェクトを選択して出力できます。

proc document name=WORK.MYDOC1;
    replay \ (where=(_name_ in ("Moments","BasicMeasures") ));
    run;
quit;




「PROC DOCUMENT」記事一覧
その1:再出力
その2:部分的な再出力
その3:BY変数の再利用
その4:出力結果の結合



0 件のコメント:

コメントを投稿