投稿

7月, 2017の投稿を表示しています

マクロ %if とデータステップ if ステートメントで、●● < ▲▲ < ★★ の動作が異なる

SASのデータステップでは、if の条件分岐にて、if ●● < ▲▲ < ★★ ; という書き方をすることができます。 どのように動作するかというと、以下のように動きます。 まず、●● < ▲▲ が評価されます。 つぎに、▲▲ < ★★ が評価されます。 書いている通り、数学で出てくる条件文みたいな動作をしてくれます。他の言語だとあまり見ない動きです。 では、データステップ以外の条件分岐、マクロの %if でも同じ動作をしてくれるかというと、そんなことはない、というのが今回のお話です。 マクロ %if にて、同じように %if ●● < ▲▲ < ★★ ~ と記載すると、どんな動きをするのか。 まず、●● < ▲▲ が評価されます。(ここは同じ) つぎに、直前の評価結果(falseなら 0 , trueなら 1) < ★★ が評価されます。 こちらの動きの方が他の言語でよく見る論理式の動きではないでしょうか。 2つ目の処理の仕方が違うので、一見して同じような書き方でも、データステップとは処理結果が異なることになります。 この動きの違いがどんなことを起こすのか。試しに、データステップ、マクロのサンプルコードを作ってみましょう。 62 /* データステップの例 */ 63 data _null_ ; 64 if 10 < 20 < 30 then putlog "TRUE" ; else putlog "FALSE" ; 65 if 10 < 20 < 10 then putlog "TRUE" ; else putlog "FALSE" ; 66 if 10 < 20 = 1 then putlog "TRUE" ; else putlog "FALSE" ; 67 if 20 < 10 = 0 then putlog "TRUE" ; else putlog