2016年9月1日木曜日

「ODS RESULTS」で結果ウインドウへの表示を抑制する




「ODS RESULTS」とは?


以下のプログラムを実行してみます。

proc univariate data=SASHELP.CLASS;
  var AGE;
run;

proc freq data=SASHELP.CLASS;
  table SEX;
run;


すると「結果ウインドウ」に集計結果がツリー表示されます。
(結果ウインドウとは、以下のようなやつ)














ここで「ODS RESULTSステートメント」 を使うと、結果ウインドウへの表示を抑制することが出来ます。

結果ウインドウの中身を削除してから、以下を実行すると、、
ods results off;

proc univariate data=SASHELP.CLASS;
  var AGE;
run;

proc freq data=SASHELP.CLASS;
  table SEX;
run;

ods results on;


結果ウインドウへの表示が抑制されました。
ODS RESULTS OFF;」で表示を抑制し、「ODS RESULTS ON;」で表示するように戻しています。




「ODS RESULTS」を使う利点


利点①
プログラムを長時間実行する場合などに、結果ウインドウへの表示に時間が掛かることがある。この表示を抑制することで、プログラムの実行時間が格段に早くなる場合がある。



利点②
結果ウインドウ」への表示を抑制しているので、「結果ビューア」への表示も抑制されます。
(結果ビューアとは、以下のようなプロシジャの集計結果として出力されるやつ)










役立つ例として、集計結果を「結果ウインドウ」や「結果ビューア」に表示させずに、データセットに出力したい場合、「ODS OUTPUT」と併用して以下のように書いたりします。

ods results off;
ods output Moments=OUT1;

proc univariate data=SASHELP.CLASS;
  var AGE;
run;

ods output close;
ods results on;


参考:集計結果をデータセットに出力する「ODS TRACE」と「ODS OUTPUT」




注意点


利点の②として紹介した内容について、注意があります。

「ODS RESULTS OFF」は「結果ウインドウ」への表示を抑制させているだけで、裏ではガッツリ集計結果が作られています。
以下のプログラムを実行してみてください。


ods results off;

proc freq data=SASHELP.CLASS;
  table SEX;
run;

ods results on;


proc means data=SASHELP.CLASS;
  var AGE;
run;


PROC FREQを「ODS RESULTS ~」で囲ってるので、MEANSの結果だけ出力されると思いきや、FREQとMEANS両方出力されてしまいました。

これは先ほど説明した通り、FREQは「ODS RESULTS ~」で囲っていても出力結果は裏で作られています。
なのでMEANSを実行したときに、裏で作られていたFREQの結果も一緒に出てきてしまうわけです。



0 件のコメント:

コメントを投稿