SASで条件分岐を使いこなす

Share Button

SASでは、慣れていないうちは、結構回りくどく条件分岐をかかなきゃいけなかったりすると、すごく嫌なことになる場合があります。
上級者の方には何の役にも立たない小ネタです。

よくぶちあたる問題1

「IF varName=1 OR varName=2 OR varName=3 OR… THEN varX=1000をなんとかしたい」

とてもよくありますね。
こんな感じで書けます。

DATA testlib.testdat;
  SET testlib.testdat;
  IF varName IN (1,2,3) THEN varX=1000;
run;

varNameが括弧内の条件に当てはまる場合のみ処理を行わせることができます。


よくぶちあたる問題2

「THENのあとに複数の処理をかけたい」

IF varName = 1 THEN varX=1000;
IF varName = 1 THEN varY=’OK’;
(IF varX=1000 THEN varY=’OK’;でもよし)
複数の処理をかける方法がわからないとまあこんな感じになりますよね。
でも実は結構簡単に一括処理はできます。

DATA testlib.testdat;
  SET testlib.testdat;
  IF varName=1 THEN DO;
    varX=1000;
    varY='OK';
  END;
run;

THENのあとにDO〜ENDをかければ、条件に合う場合にのみDOからENDまでの処理をやってくれます。


よくぶちあたる問題3

「長ったらしいIF〜ELSEをなんとかしたい」

IF varName=1 THEN varX=1000;
ELSE IF varName=2 THEN varX=1245;
ELSE IF varName=3 THEN varX=8456;
ELSE IF varName=4 THEN varX=4752;
ELSE IF varName=5 THEN varX=94254;
ELSE varX=0;

まあよくこんな感じになることはありますね。
(あえて処理先の数字をぐちゃぐちゃにしてあります)

DATA testlib.testdat;
  SET testlib.testdat;
  SELECT (varName);
    WHEN (1) varX=1245;
    WHEN (2) varX=8456;
    WHEN (3) varX=4752;
    WHEN (4) varX=94254;
    OTHERWISE varX=0;
  END;
run;

長さとしては別にそう大して変わらないっていうかむしろ結構めんどうな感じもしますが、あとから読み直す分には結構読みやすいんじゃないかなーと思います。

またなんか思いついたら追記します。

 
 


Share Button

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です