proc printはODS OUTPUTステートメントをサポートしていない話

今回は、思いつきが失敗した話になります。

以前、「Create tableだけがSQLプロシジャでデータセットを作る方法ではないという話」
http://sas-tumesas.blogspot.jp/2013/10/create-tablesql.html

でSQLプロシジャの出力をODS OUTPUTステートメントで捉えてデータセット化するという内容を紹介しました。
それで、最近ふと思ったのが、それってproc printでもできるのか?ということでした。

例えば以下のようなデータセットがあったとします。

data Q1;
do X=1 to 4;
 do Y=1 to 3;
  output;
  end;
 end;
run;

















そこに

proc print data=Q1 noobs;
 var Y;
 id X ;
 by X ;
run;

を実行すると
idステートメントとbyステートメントの同時指定の効果により


















のようなアウトプットがでます。
この形をデータセットで欲しいなと思って

ods output Print=OUT;
proc print data=Q1 noobs;
 var Y;
 id X ;
 by X ;
run;

として、実行しなおしてみると




ERROR: PROC PRINT はODS OUTPUT」ステートメントをサポートしていません
と見事に怒られてしましました。
悪くないアイデアだと思ったのですが、、。

ちなみに全然関係なく、id by sumbyの併用で、いかのような出力が得られ、たまに検算する時に
使います。

proc print data=Q1 noobs;
 var Y;
 id X;
 by X ;
 sumby X;
run;





























2 件のコメント:

  1. こんにちは。
    基本的なprintプロシジャがods output使えないのは初めて知りました。
    dataステップでどうにかしろってことなんでしょうかね。

    代わりにreportプロシジャ使えるかと思って試してみたら、これもうまく出来なかったです。
    あとcompareプロシジャなんかもods outputで出力すると、出力自体はできても中身がおかしなことになってたりしてます。
    なんか統計関連のプロシジャ以外はodsでの扱いが雑ですね。。

    返信削除
    返信
    1. こんにちわ。
      compareプロシジャ、前に僕もやってがっかりしました。平テキストを無理やり改行で区切ったような感じになってた気がします。

      ods graphicsのパターン増やす前に、全プロシジャのods outputを整備して欲しいですよね

      削除