ラベル 比較演算子 の投稿を表示しています。 すべての投稿を表示
ラベル 比較演算子 の投稿を表示しています。 すべての投稿を表示

2019年3月29日金曜日

【SAS入門】比較演算子



SASで値同士の比較を行う比較演算子について簡単にまとめておきます。




比較演算子

  演算      演算子    
  等しい   = 
  等しくない    ^= 
  より大きい    >
  より小さい   <
  以上   >=
  以下    <=
  いずれかと等しい    IN
  いずれとも等しくない    ^IN






data DT1;
   A = 1;
   B = 2;

   if  A  =  B          then  FLG1=1;     /* AとBが等しいか */
   if  A ^= B          then  FLG2=1;     /* AとBが等しくないか */
   if  A  >  B          then  FLG3=1;     /* AがBより大きいか */
   if  A  <  B          then  FLG4=1;     /* AがBより小さいか */
   if  A >= B          then  FLG5=1;     /* AがB以上か */
   if  A <= B          then  FLG6=1;     /* AがB以下か */
   if  A  in (1,2,3)   then  FLG7=1;     /* Aが1,2,3のいずれかか */
   if  A ^in (1,2,3)  then  FLG8=1;     /* Aが1,2,3のいずれでもないか */ 
run;


この例のように、IFステートメントやWHEREステートメントの中で条件式を書くときに、比較演算子を用います。


ただし、、

「IN」を使う際、「A IN (1,2,3)」みたいに右辺に値を指定するのはいいけど、「A IN (B,C,D)」みたいに右辺に変数を指定することはできないっぽいのでご注意を。




余裕があったらこちらもどうぞ

NOT演算子で条件の否定をする




2015年10月13日火曜日

比較演算子のアルファベット表記と、ちょっとした小技





IF / WHEREステートメントで用いる比較演算子は、アルファベット2文字で書くことができます。

 比較演算子  別の書き方  意味 
 = EQ equal to
 ^= NE not equal to
 > GT greater than
 < LT less than
 >= GE greater than or equal to
 <= LE less than or equal to


たとえば 「if A=1」 は 「if A eq 1」 とも書けます。

海外のSASプログラムを見てると、このアルファベット2文字を使ってる事が結構あります。

各自が好きな書き方でプログラミングを楽しめるのが一番だと思いますが。。
まわりのSASプログラマに聞いてみたら、この書き方は結構受けが悪かったです。




ちょっとした小技

受け悪いって方にも、使えるかもしれないテクニックを紹介。
以下をご覧ください。

%macro SAMPLE( WH );
     data DT1;
          set SASHELP.CLASS;
          where &WH;
     run;
%mend;

%SAMPLE( AGE = 13 );

ログ
 ERROR: キーワードパラメータAGEは、マクロに定義されていません。


詳細は割愛しますが、
%SAMPLE( AGE = 13 )」 で 「AGE = 13」 という引数を指定したわけですが、引数にイコール「=」があると、キーワードパラメータというものとして解釈され、今回の意図とは異なる動きをしてエラーとなってしまいました。


通常の解決方法として、%STR関数等で 「=」 の効力を無効化してやります。

%SAMPLE( %str(AGE = 13) );



そして、もうひとつの解決方法。

%SAMPLE( AGE eq 13 );




アルファベット表記に変えてしまえば、「=」 を使わなくて済むというわけです。