条件分岐処理は、SASに限らず様々なプログラミング言語で不可欠なものです。
SASのDATAステップ処理においては、おなじみの
・IF 条件式 THEN 処理 ;
・IF 条件式 THEN 処理1 ;
ELSE 処理2 ;
・IF 条件式1 THEN 処理1 ;
ELSE IF 条件式2 THEN 処理2 ;
や、SELECTステートメントを使用した、
・SELECT(変数名) ;
WHEN(条件1)処理1 ;
WHEN(条件2)処理2 ;
OTHERWISE ;
END ;
・SELECT ;
WHEN(条件式1)処理1 ;
WHEN(条件式2)処理2 ;
OTHERWISE ;
END ;
などの書き方があります。
では、SQLプロシジャでの条件分岐処理はどのように記述すればいいでしょうか。
例えば、以下のようなSASデータセットがあるとき、
変数VAR2の値が偶数のときは、変数VAR3に"偶数"を、
変数VAR2の値が奇数のときは、変数VAR3に"奇数"を格納する処理をしてみます。
proc sql ;
create table temp2 as
select var1,
var2,
case mod(var2,2)
when 0 then "偶数"
else "奇数"
end as var3
from temp ;
quit ;
構文は以下の通りです。
CASE 変数名 WHEN 変数の値1 THEN 返す値1 WHEN 変数の値2 THEN 返す値2 ~ ELSE 返す値 END
CASEの後に変数名と書きましたが、上記プログラムのように関数を直接記述することも可能です。
その場合は、変数の値と書いた箇所を関数の戻り値と解釈して下さい。
また、CASE式は「IF ~ THEN ~ ; ELSE IF ~ THEN ~ ; ELSE ~ ;」のように評価していきます。
よって、真と評価された時点でCASE式を抜けます。また、全て偽と評価されればELSE以降の処理が行われます。
記述方法は少し異なりますが、以下のような書き方も可能です。
proc sql ;
create table temp3 as
select var1,
var2,
case
when mod(var2,2)=0 then "偶数"
else "奇数"
end as var3
from temp ;
quit ;
最後にそれぞれの実行ログと出力結果を掲載しておきます。
[google]
0 件のコメント:
コメントを投稿