2021年10月26日火曜日

ODS OUTPUTで出力結果を結合する①PERSIST=PROC



ODS OUTPUTの「PERSIST=オプション」について、2回に分けて詳しく紹介していきます。

まず1回目は「PERSIST=PROC」について。 



以下の失敗例をご覧ください。

ODS OUTPUTの中にプロシジャを複数記述したけど、最初のプロシジャの結果しかデータセットに出力されませんでした。


😟失敗例

ods output Moments = out1;

    /* データセットに出力される */
    proc univariate data=sashelp.class;
        var height;
        where age=13;
    run;

    /* データセットに出力されない */
    proc univariate data=sashelp.class;
        var weight;
        where age=14;
    run;

ods output close;



そこで「PERSIST=PROC」というオプションの出番です。

以下のように、プロシジャ間で出力オブジェクトの名前が一緒であれば(今回の場合は「Moments」)、結合してデータセットに出力することが出来ます。


😄成功例(PERSIST=PROC

ods output Moments (persist=proc) = out1;

    proc univariate data=sashelp.class;
        var height;
        where age=13;
    run;

    proc univariate data=sashelp.class;
        var weight;
        where age=14;
    run;

ods output close;



ただし、以下のようにPERSIST=オプションと一緒に「BYステートメント」が使われていると、WARNINGが出て、正しい結果が得られないようです。


😞注意(BYステートメントは使えないっぽい)

ods output Moments (persist=proc) = out1;

    proc univariate data=sashelp.cars;
        var msrp;
        by make;
    run;

    proc univariate data=sashelp.cars;
        var invoice;
        by make;
    run;

ods output close;

--- LOG --------------
WARNING: ODSでは、データセットWORK.OUT1をRUNグループ間で保持できません。
BY変数が含まれているからです。データセットは第1 RUNグループが終了すると終了します。


To be continued...

https://sas-boubi.blogspot.com/2021/11/ods-outputpersistrun.html