2007年8月9日木曜日

便利な条件分岐処理 CASE式を使ってみよう!



条件分岐処理は、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データセットがあるとき、

f:id:n-insight:20070808154320j:image

変数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 ;

最後にそれぞれの実行ログと出力結果を掲載しておきます。

f:id:n-insight:20070808173638j:image

f:id:n-insight:20070808173712j:image



[google]

0 件のコメント:

コメントを投稿

ツイート数からみる"バーチャルYouTuber"ブーム

今や YouTuber の話題の半分を占めるほどのクチコミ数に 当社が提供するソーシャルビッグデータ検索ツールの「 beInsight (ビーインサイト)」を使って、話題の「バーチャル YouTuber 」について調べてみました。 「バーチャル YouTuber...