2016年9月1日木曜日

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



Windows版SASでの説明になります。
SAS Studioなど「結果ウインドウ」が存在しない環境では今回紹介する機能は動作しません。



まずは「結果ビューア」と「結果ウインドウ」を混同しないように違いの説明から。
以下を実行すると、

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


設定によって挙動は異なりますが、
  • 結果ビューア」にHTML形式でUNIVARIATEの結果が出力されます
  • 結果ウインドウ」は画面左側などにあって、UNIVARIATEの結果に対するリンクツリーが表示されます(ちなみにSAS Studioだと結果タブにある「目次」が結果ウインドウに似ているけど別物)

詳細は以下リファレンスを参照下さい。



そして今回は「結果ウインドウ」の制御を行う「ODS RESULTSステートメント」を紹介します。
環境・設定によって挙動が違うので、Windows版SAS、かつ結果の出力先が「結果ビューア」になっている前提で説明します。



「ODS RESULTS」とは?


以下を実行すると、、

ods results off;
proc univariate data=SASHELP.CLASS;
  var AGE;
run;
ods results on;

「ODS RESULTS~」で囲ったUNIVARIATEの結果に対するリンクツリーが「結果ウインドウ」に表示されなくなります。
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;
  tables 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 件のコメント:

コメントを投稿