4月からSASを始める方も多いので、入門記事的なのも書いてこうと思います。
最後に注意点も書いてるので、そちらも見ていただけたらと思います。
では早速、以下をご覧ください。
上のデータからXが「1」「2」「2.1」のいずれかのオブザベーションを抽出したいとします。
なんも考えずに書くと以下のようになりますね。
ですが、この書き方はちょっとメンドイです。以下のようにもっと楽な書き方があります。
こんな感じで、ひとつの変数に対して「この値とこの値」または「この値からこの値まで」のオブザベーションをWHEREやIFで抽出したい場合の、範囲の書き方を以下にまとめました。
範囲の書き方
注意点
では早速、以下をご覧ください。
* Sample data ;
data DT1; do X=1, 1.1, 2, 2.1, 3; output; end; run;
|
上のデータからXが「1」「2」「2.1」のいずれかのオブザベーションを抽出したいとします。
なんも考えずに書くと以下のようになりますね。
data OUT1;
set DT1;
where X=1 or X=2 or X=2.1;
run;
|
ですが、この書き方はちょっとメンドイです。以下のようにもっと楽な書き方があります。
data OUT1;
set DT1;
where X in (1, 2, 2.1);
run;
|
こんな感じで、ひとつの変数に対して「この値とこの値」または「この値からこの値まで」のオブザベーションをWHEREやIFで抽出したい場合の、範囲の書き方を以下にまとめました。
| 指定内容 | 例 | 例から抽出されるX | 注意事項 |
| ●●以下 | ・X <= 2 ・2 >= X | 2以下 | |
| ●●未満 | ・X < 2 ・2 > X | 2未満 | |
| ●●以上 | ・X >= 2 ・2 <= X | 2以上 | |
| ●●超 | ・X > 2 ・2 < X | 2超 | |
| ●●以上、■■以下 | ・X >= 1 and X <= 2 ・X between 1 and 2 | 1以上、2以下 | ・betweenはwhereだけに対応 (ifでは使えない) |
| ●●超、■■未満 | ・X > 1 and X < 2 | 1超、2未満 | |
| ●● 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 |
注意①
今回は「DATAステップやプロシジャにおけるWHEREやIF」での「数値変数に対する範囲の書き方」に限定。
今回は「DATAステップやプロシジャにおけるWHEREやIF」での「数値変数に対する範囲の書き方」に限定。
%IF等のマクロステートメントでは挙動が異なるので、リファレンスや以下の記事などをご確認下さい。
注意②
取扱注意のため、今回紹介しなかった「1 <= X <= 2」や「1 < X < 2」という書き方もありますが。。
DATAステップ、プロシジャ、マクロステートメントなどの機能毎に挙動が異なる場合があります。
特に、%IFなどのマクロステートメントでは挙動が「超絶」異なるので使用NGです。
またこれはSAS独特の書き方で、他言語では通用しません。
注意③
記事の趣旨から外れますが、初学者向けに注意点。
WHEREやIFに「AND」と「OR」の式が混在していると、「AND」→「OR」の順に式が優先される。
- X=1 or Y=1 and Z=1 だと、「X=1」or「Y=1 and Z=1」という式のまとまりになる。
- (X=1 or Y=1) and Z=1 のようにカッコで囲むとそこが優先されて、「X=1 or Y=1」and「Z=1」となる。