うずまき2017 powered by Jun-Systems

耳管開放症, SAS, 統計解析, 人工知能, プログラミングそれに思考

*

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

   

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;

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

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

 
 


 - SAS Programming

Message

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

  関連記事

no image
SAS上で走っているRとSASでのデータセットの受け渡し
no image
SASのPROC HTTPでe-statのAPIを叩く(叩くだけ)
SASで変数リスト内の全変数に順番に同じ処理をかけていくマクロ
no image
SASで横方向の合計を出すには PROC SQL part2
no image
SASを使いやすくカスタマイズしよう SAS環境変数,AUTOEXECなど
no image
SASで直接twitterを検索してTLをインポート(PROC HTTP/Twitter OAuth)
no image
SASでウェブ上のcsvファイルを直接読み込む
SASでカテゴリカルな変数をダミー変数化するマクロ
実用性重視のSASコマンド集
no image
SAS上でRを走らせよう SAS/IML