2017年11月8日水曜日

DATAステップビューの作成


前回「SQLビューの作成と落とし穴①」を書いたので、似たような機能の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ステップビューのメリット


たとえば、以下のようにデータセットDT1から変数Cを作って、その変数にMEANSをかけたいとします。

data STAT1;
   set DT1;
   C = A + B;
run;

proc means data=STAT1;
   var C;
run;


もしDT1の中身が定期的に更新される場合、更新される度に上のプログラムを実行する必要がありますよね。


ですが、以下のようにDT1を参照して変数Cを作るDATAステップビューを1度だけ実行・保存しておけば、、

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


DT1が更新されても、以下のようにDATAステップビューを参照するMEANSを実行するだけで済みます。

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

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



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



データステップ100万回でSQLビューとDATAステップビューについて、あと注意点についても書かれてるので、合わせてご参照下さい。

SASのテーブルビュー(view)について

ビューの生成コードを出力するdescribeについて、SQLビューとデータステップビューだと方法が違うから気を付けてって話


0 件のコメント:

コメントを投稿