問題です。次のプログラムを実行すると、どんなデータセットができるでしょうか?
data A;
X=5=5;
run;
最近、こういう系の話ばっかりしていて、飽きているかもしれませんが。
エラーになってデータセットができない or X=5でデータセットができると考えた方は不正解です。
正解は
X=1でデータセットができるでした。
これは実は
X=(条件式);の形で、条件式の中が真である場合は、1、偽である場合は0を返します。
つまり先程のコードはX=(5=5);ということで、5と5は等しいので真でありX=1です。
要するに、これを利用することで簡単に0,1のフラグ変数を作れて、条件で集計する場合などに
役立ちますという話です。
今、以下のようなデータセットがあったとします。
data Q1;
X=2;Y=1;output;
X=3;Y=2;output;
X=5;Y=2;output;
X=4;Y=8;output;
run;
ここで、X>Y and X^=2の条件で0,1変数を作りたいなと思ったら
data A1;
set Q1;
FLAG=X>Y and X^=2;
run;
で、詰みなんです。簡単です。
ちなみに恥ずかしい話なんですが、僕はずっと上記のコードで済むところを
以下のように
data A2;
set Q1;
FLAG=ifn(X>Y and X^=2,1,0);
run;
ifn関数を使っていました。
条件によって戻り値を加工したい場合はifn(戻り値が文字型ならifc)ですが
0,1の戻り値なら普通に抽出式書くだけなんですね。
ちなみにSQLプロシジャにおいても、ほぼ同じ話があって、そちらの詳細は
ブログ「SAS忘備録」の「SQLプロシジャでフラグ変数を簡単に作成。 」という記事に書かれていて目から鱗ものですよ。
http://sas-boubi.blogspot.jp/2013/12/sql.html
ちなみSQLプロシジャでIFN IFC関数を利用して、0,1のフラグ変数ではなく、
条件式によって戻り値を変えるという方法については、本ブログの以下の記事で僕も書いています。
「SQLのCASE式がどうしても苦手な場合、IFC、IFN関数で代用してみる 」
http://sas-tumesas.blogspot.jp/2013/11/sqlcaseifcifn.html
0 件のコメント:
コメントを投稿