「IFは使うけど、SELECTは全然使わない、むしろ要らないよ」っていう人がいたので、IFとSELECTを勝負させてみたいと思います。
各ステートメントについては以下で解説してます。
・IF-THEN-ELSE入門 【条件分岐処理】
・SELECT-WHEN入門 【条件分岐処理】
ROUND1.
以下は、変数VAR1の値によって、VAR2の値を設定しています。
data DT1;
VAR1 = "b";
* IFステートメントの場合 ;
if VAR1 = "a" then VAR2 = 1;
else if VAR1 = "b" then VAR2 = 2;
else if VAR1 = "c" then VAR2 = 3;
run;
|
このように、ひとつの変数の値によって処理を分岐する場合にSELECTがつかえます。
data DT2;
VAR1 = "b";
* SELECTステートメントの場合 ;
select (VAR1);
when ("a") VAR2=1;
when ("b") VAR2=2;
when ("c") VAR2=3;
otherwise VAR2=.;
end;
run;
|
SELECTの方がスッキリしている気がします。なのでSELECTの勝ちです。
ROUND2.
以下は、変数VAR1の1バイト目の値によって、VAR2の値を設定しています。
data DT3;
length VAR1 VAR2 TEMPVAR $10.;
VAR1 = "M001";
* IFステートメントの場合 ;
TEMPVAR = substr( VAR1,1,1);
if TEMPVAR = "M" then VAR2 = "MALE";
else if TEMPVAR = "F" then VAR2 = "FEMALE";
drop TEMPVAR;
run;
|
TEMPVARという変数にVAR1の1バイト目を入れておいて、最後にこの変数をDROPしています。
このような場合も、SELECTの方がスッキリしてみえます。
data DT4;
length VAR1 VAR2 $10.;
VAR1 = "M001";
* SELECTステートメントの場合 ;
select (substr(VAR1,1,1));
when ("M") VAR2 = "MALE";
when ("F") VAR2 = "FEMALE";
otherwise VAR2 = "";
end;
run;
|
IFの時は、「TEMPVAR = substr(VAR1,1,1);」っていう変数作って、あとでDROPしましたが、
SELECTの時は、「select (substr(VAR1,1,1));」って書いちゃえば、変数作らずに済んでDROPステートメントが不要になります。
これもSELECTの勝ち。
てことで、SELECTの完全勝利ですね。
(ちなみにハンデとしてSELECTが勝てる勝負だけ選びました)
0 件のコメント:
コメントを投稿