頑健なプログラム書ける人っています。
シンプルかつ、イレギュラーな値が入っても処理が揺らがない、或いは
直すべき場所がすぐわかるような、しっかりしたコードは憧れます。
将棋で言うなら「受け」の技術って感じですね。
そんな受けのテクニックの一つです。
今、
data A;
X=1;
run;
data B;
run;
というデータセットがあったとします。
データセット「B」は変数オブザベーションを持たない
全くのnullデータ、クズセットです。
本来はきちんとしたデータセットのはずなのに
何か手違いがあってこうなってしまったと思ってください。
そこで以下のコードを実行すると
data A;
set B;
run;
当然「A」の中身もなくなります。
仮に「A」が大事なデータセットだとして、
setする「B」が変数とオブザベーションをもった普通のデータセットの時のみ
処理したければ、どうしますか?
マクロ等で、データセットの中身を調べてから分岐してもいいですが、
この場合、もっと、簡単に防御できます。
data A;
X=1;
run;
data B;
run;
data A(REPEMPTY=NO);
set B;
run;
とデータセットオプション(REPEMPTY=NO)とすると
「WARNING: REPEMPTY=NO and the replacement file is empty.ため、データセット WORK.A を置き換えていません。」
というログに出て、Aの上書きが拒絶されます。
Aの中身はそのままです。
以下のような場合もどうようです。
proc sort data=A out=A(REPEMPTY=NO);
where X>5;
by X;
run;
この書き方も結構使えます。読み込まれたデータがないなどで
解析出力がないは上書きしないみたいなことが実現できます。
まあ、僕はSASも将棋も受けは下手なので、あまり詳しくないですが。
0 件のコメント:
コメントを投稿