前回「SQLビューの作成と落とし穴①」を書いたので、似たような機能のDATAステップビューに関しても触れておきます。
以下をご覧ください
上で作成した 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; |
たとえば、以下のようにデータセット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 件のコメント:
コメントを投稿