2018年4月3日火曜日

IF vs SELECT



「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")  Y=1;
      when ("b")  Y=2;
      when ("c")  Y=3;
      otherwise   Y=.;
   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 件のコメント:

コメントを投稿