2018年4月11日水曜日

WHEREやIFでの範囲指定の書き方




4月からSASを始める方も多いので、入門記事的なのも書いてこうと思います。


では早速、以下をご覧ください。


* Sample data ;
data DT1;
   do X=1, 1.1, 2, 2.1, 3;
      output;
   end;
run;

  X  
 1 
 1.1 
 2 
 2.1 
 3 


たとえば、上のデータからXが「1」「2」「2.1」のいずれかのオブザベーションを抽出したいとします。
なんも考えずに書くと以下のようになりますね。

data OUT1;
  set DT1;
  where X=1 or X=2 or X=2.1;
run;
  X  
 1 
 2 
 2.1 



ですが、この書き方はちょっとメンドイです。以下のようにもっと楽な書き方があります。

data OUT1;
  set DT1;
  where X in (1, 2, 2.1);
run;
  X  
 1 
 2 
 2.1 


こんな感じで、ひとつの変数に対して「この値からこの値までのオブザベーションをWHEREで抽出したい(またはIFで条件式を書きたい)」という場合の、範囲の書き方を以下にまとめました。




範囲の書き方

 指定内容 例 例から抽出されるX  注意事項
 ●以下

・X <= 2
・2 >= X
 2以下


 ●未満

・X < 2
・2 > X
 2未満

 ●●以上

・X >= 2
・2 <= X
 2以上

 ●

・X > 2
・2 < X
 2超

 ●以上、以下  






・1 <= X <= 2 
・X >= 1 and X <= 2
・X between 1 and 2  




 1以上、2以下






・「1 <= X <= 2」みたいなのは
 SAS独特の書き方
 (他言語では使わない事!)

・betweenはwhereだけに対応
 (ifでは使えない)

 ●超、未満



・1 < X < 2
・X > 1 and X < 2


 1超、2未満



・「1 < X < 2」みたいなのは
 SAS独特の書き方
 (他言語では使わない事!)

 ●  or    or  …

・X in (1, 2, 2.1)

 1 or 2 or 2.1

 ●以上、以下
  (かつ整数)
・X in (1:2)

 1以上、2以下の整数

 昔の記事で紹介してます。
 http://sas-boubi.blogspot.jp/2014/01/in.html



注意事項
「1 <= X <= 2」や「1 < X < 2」みたいな書き方は便利ですが、SAS独特の書き方です。他言語では通用しません。

他言語でも同じように書いてしまうとSASとは異なるロジックで解釈をして想定外の結果になってしまうので、ご注意ください!

0 件のコメント:

コメントを投稿