2021年11月15日月曜日

「PROC SQL」と「ODS OUTPUT の PERSIST=RUN」のコンボ技



まず今回のコンボ技を理解するには「ODS OUTPUTのPERSIST=RUN」の知識が必要なので、先に以下リンク記事をご覧ください。

ODS OUTPUTで出力結果を結合する②PERSIST=RUN

 

それでは本題。以下のプログラムをご覧ください。

ods select none;
ods output SQL_Results(persist=run)=out1;

proc sql;
 select count(*) as c1 from sashelp.class;
 select count(*) as c1 from sashelp.cars;
 select count(*) as c1 from sashelp.baseball;
quit;

ods output close;
ods select all;


一応、細かく説明しておくと、

  • PROC SQLは対話型プロシジャなので、1つのプロシジャで複数の集計をいっぺんに行ってます。
  • 「ODS OUTPUTのPERSIST=RUN」で対話型プロシジャ内のそれぞれの集計結果について、出力オブジェクトの名前が共通するものを縦結合しています。(今回の場合はすべての集計で、出力オブジェクトの名前が「SQL_Results」という名前で共通している)
  • 「_RUN_」という変数が勝手に作られました。RUNグループのIDと推測されます。SQLの場合は「RUNステートメント」は記述不要なので、実行グループ(セミコロン「;」で終わる文)のIDですね。
  • ちなみにPROC SQLで「NOPRINTオプション」を設定するとODS OUTPUTが使えない(データセットに出力されない)ので注意



ID振って縦結合してくれるのが便利。他の方法でも同じこと出来るけど、こっちのほうが文が短く済む場合があります。


ただし私自身、単純な集計でしか使ったことないので、各自利用する際は結果が希望通りのものになるか、ご確認下さい。

また、ODS OUTPUTで出力すると変数属性(変数名、length、formatなど)が自動調整される場合があるのでご留意ください。(以下リンク記事参照)

「ODS OUTPUT」で変数属性が自動調整される件



0 件のコメント:

コメントを投稿