一緒にするには少し毛色が違ったのでわけました。
さて今、以下のようなデータセットがあったとします。
data Q1;
do X=1 to 5;
output;
end;
run;
そこに
data A1;
set Q1;
where X>2;
where X<4;
run;
を実行すると、何がおきると思いますか?
whereステートメントが連続で、でてきます。
え、エラーじゃないの?と思われた方は不正解で、正しく実行されます。
結果は
となり、ログをみると
「WHERE式を置き換えました」というNOTEがでています。
つまり、一つ目のWHEREは二つ目に上書きされて、無効化されてしまったのです。
最後にくるWHEREだけが効きます。
もし、今やりたいことが「X>2」「 X<4」の2条件で抽出をかけることであれば
当然
data A1;
set Q1;
where X>2 and X<4;
run;
set Q1;
where X>2 and X<4;
run;
でいいわけです。
が、しかし、次のようにも書くことができます。
それが
data A2;
set Q1;
where X>2;
where same X<4;
run;
ですsameをつなぐことによって
whereステートメント同士をandでつなぐのと同じ効果があります。
「WHERE式を追加しました」というNOTEがでます。
で、どういう時に使うかというと
抽出式があまりに長くなって見通しが悪い時や、
元コードをできるだけ修正せずに、新しい条件を追加したい場合、
マクロ化して、抽出条件をオプションで追加できるように組む場合等でしょうか?
条件を色々追加しながら対話的に、データを段階的に絞りこんで探索する場合なんかも
いちいち and ○○とかいていくより、区切りがつくのでお勧めです。
こんにちは。
返信削除「where also」しか知らなかったんですが、「same」なんてのもあったんですね。
SASv9.2では5個以上「where also」文を書くと、エラーが出たり、正しい結果が得られなかったりするらしいですが、「same」だと大丈夫なんでしょうか?
9.3の環境しかないので試せないのですが。。
こんにちわ。
返信削除僕は「where also」知りませんでした!5個以上の問題も初耳でした!
今、9.2の環境で5個以上書いてみたら、alsoもsameも正しく結果でましたが、
抽出条件によるのでしょうか。
ググってみたら確かに
「Problem Note 41119: Multiple WHERE ALSO statements in the DATA Step returns incorrect results or errors」としてHotfixでてました。
http://support.sas.com/kb/41/119.html
でもsameのこと書いてないし
他の場合、例えばsetステートメントの1個ずつメモリを解放するつなぎ方でalsoとsame使えませんってときの説明にはsameとalsoを併記しているので
[WHERE ALSO and WHERE SAME AND statements do not work with OPEN=DEFER option on SET statement]
http://support.sas.com/kb/37/657.html
5個以上の問題はALSOだけなのかもしれません、、。
あ、リンク見たら5個じゃなくて6個以上の間違えでした。
返信削除とりあえず現状はエラー報告のあがってないsameがいいっぽいですね。
ありがとうございました!