「WHEREステートメント」 と 「WHERE=データセットオプション」 を組み合わせると、想定外のデータになってしまうかもしれないです。
*** サンプルデータ作成 *************; data DT1; A=1; B="aa"; output;
A=2; B="bb"; output;
run;
data DT2; A=1; output; A=2; output; run;
*** 注意が必要な例 **********; data OUT1; merge DT1(where=(B="aa")) DT2; by A; where A=2; run;
|
結果のデータセットは想定通りだったでしょうか?
↓こんな感じになると思った方もいると思います。
A
|
B
|
---|---|
2
|
これは、
- 「WHERE=データセットオプション」が指定されたデータセットは、そのWHERE条件だけが適用され、
- それ以外のデータセットは「WHEREステートメント」の条件が適用される。
つまり、今回の例で、、
merge DT1 (where=(B="aa")) DT2; by A;
where A=2;
|
- DT1は「where=(B="aa")」の条件が適用され、
- DT2は「where A=2」の条件が適用されて、マージされます。
ちなみに、SAS9.3からログに以下のようなWARNINGが出るようになっていますが、SAS9.2ではWARNINGが出ないので、この問題に気づきにくいです。
WARNING: WHEREステートメントは最後のSET/MERGE/UPDATE/MODIFYステートメントのデータセットに適用できません。
データセットがオープンエラー、または既にWHEREデータセットオプションを指定しています。
|
0 件のコメント:
コメントを投稿