2014年2月7日金曜日

関数の小技


関数の中に式を書くテクニック。


サンプルプログラム

data DT1;
   V1 = 1;
   V2 = "abc";
   VSUM = sum( V1=1, index(V2,"b")>0 );
run;


解説

関数の中にあるそれぞれの式には、
条件に合致する場合「1:true」、合致しない場合「0:false」が返される。

上記サンプルの場合、
・式「V1=1」の結果は「1:true
・式「index(V2,"b")>0」の結果は「1:true
・「sum(1:true + 1:true)」=「2」となる。


応用例

SUM関数での応用例としては
  ・条件に当てはまる個数を知りたい
  ・IF文を短縮させたい
といったとき役に立つ。

IF文の短縮とは、、
たとえば上記サンプルに、以下のようなルールで変数「FLG」を作りたいとする。
条件①「V1」=「1」である。
条件②「V2」に"b"という文字が含まれている。

・条件が全て当てはまらない場合 ・・・ FLG=「1」
・いずれか当てはまる場合 ・・・ FLG=「2」
・全て当てはまる場合 ・・・ FLG=「3」



通常、以下のようなIF文を書くことになるけど、、

if  not (V1=1  or  index(V2,"b")>0)    then FLG=1;
if  V1=1  or  index(V2,"b")>0       then FLG=2;
if  V1=1  and  index(V2,"b")>0    then  FLG=3;



関数の中に式を入れる方法を使うと、

VSUM = sum(V1=1, index(V2,"b")>0);

if  VSUM = 0  then  FLG=1;
if  VSUM > 0  then  FLG=2;
if  VSUM = 2  then  FLG=3;


このようにすっきりした文を書くことが出来る。


まとめ

パフォーマンスが悪くなったり、関数の中の式があまりにも長文になる場合を除いて、スッキリと見通しのいいプログラムになるのであれば積極的に使ってます。

他の関数でも、たくさん応用的な使い方が出来るので、どんなことが出来るかいろいろ試してみると面白いです。

0 件のコメント:

コメントを投稿