2017年11月8日水曜日

DATAステップビューの作成と落とし穴①




まずはDATAステップビューについて説明して、次の記事で落とし穴を紹介(記事の最後にリンク貼ってます)
ミスを起こしやすい仕様があるので落とし穴の記事も必ず参照下さい!



以下をご覧ください

data DSVIEW / view=DSVIEW;
   set SASHELP.CLASS;
   keep NAME AGE;
run;

proc print data=DSVIEW noobs;
run;


上で作成した DSVIEW は一見データセットに見えますが、「DATAステップビュー」というもので以下が保存されます。
  • コンパイルしたDATAステップのプログラム
  • 変数の型やLENGTHといった属性情報

このDATAステップビューを開いたり、参照すると、コンパイルしたプログラムが実行されて結果のデータが返ってくる仕組みになっています。


構文

   DATA  ビュー名 / VIEW = ビュー名;
      ~ プログラム ~
   RUN;



ビューの定義を見たい場合は以下のように書きます。

data view=DSVIEW;
   describe;
run;

ログ
NOTE: DATAステップビューWORK.DSVIEWの定義:

data DSVIEW / view=DSVIEW;
   set SASHELP.CLASS;
   keep NAME AGE;
run;




DATAステップビューのメリット


たとえば、以下のようにデータセット MYLIB.DT1 を参照している MYLIB.STAT1 というビューを作ったとします。

data MYLIB.STAT1 / view=MYLIB.STAT1;
   set MYLIB.DT1;
   C = A + B;
run;


そしてこのビューを使って翌日 PROC MEANS を実行したいとします。

proc means data=MYLIB.STAT1;
   var C;
run;


しかし翌日、ビューが参照している MYLIB.DT1 に値の変更が発生したとします。 この場合、再度ビューを作り直す必要はありません。

なぜなら以下のように、

proc means data=MYLIB.STAT1;
   var C;
run;


ビューを参照するだけで、内部で最新の MYLIB.DT1 に対してビューに保存されたデータステップのプログラムが実行され、その結果に対してMEANSが実行されるからです。



またメリットとして、ビューの中身は定義なのでファイルサイズは小さいです。
ただし、プログラム中に何回も同じ中身のビューを参照するような状況では、参照するたびに内部でデータステップのプログラムが実行される事になるので、処理効率が悪くなります。



次回は「落とし穴編



0 件のコメント:

コメントを投稿