2016年9月2日金曜日

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


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



ステップ① プロシジャの結果を保存
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オブジェクト)を保存



ステップ② 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;


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

今回は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 件のコメント:

コメントを投稿