2016-12-19 12 views
0

SASでのマージに精通していて、これまでに問題がなかったのですが、今まで問題になっていなかった問題がありました。 何らかの理由で実際の観測データのマージはより複雑なデータセットでは適切に機能していますが、データセットの1つの変数値のみが表示されます(欠損値は上書きされません)。だからSAS Merge Issue

id var1 var2 var3 var4 
    1 2 2 . . 
    2 2 2 . . 
    3 2 2 . . 
    4 2 2 . . 
    5 2 2 . . 
    6 2 2 . . 
    7 2 2 . . 
    8 2 2 . . 
    9 . 2 . 2 
    10 . 1 . . 

id var1 var2 var3 var4 
1 2 2 2 2 
2 2 2 2 2 
3 2 2 2 2 
4 2 2 2 2 
5 2 2 2 2 
6 2 2 2 2 
7 2 2 2 2 
8 2 2 2 2 
9 . 2 . 2 
10 1 1 . . 

を代わりに、私はこれを取得:これは、次の得られるはず

data dataset1; 
input id var1 var2 var3 var4; 
cards; 
1 . . 2 2 
2 . . 2 2 
3 . . 2 2 
4 . . 2 2 
5 . . 2 2 
6 . . 2 2 
7 . . 2 2 
8 . . 2 2 
9 . 2 . 2 
10 1 . . . 
; 
data dataset2; 
input id var1 var2 var3 var4; 
cards; 
1 2 2 . . 
2 2 2 . . 
3 2 2 . . 
4 2 2 . . 
5 2 2 . . 
6 2 2 . . 
7 2 2 . . 
8 2 2 . . 
10 . 1 . . 
; 


data dataset3; 
merge dataset1 dataset2; 
by id; 
run; 

は例えば、私はこの簡単なプログラムを書きましたそれは、マージが観測値をマージしていて、第2のデータセットの値を表示しているかのようです。

私は問題を理解しようとしました(私はちょっと見ただけで非常に基本的なものだと感じています)。しかし、以前は何も起こっていないので、何が起こっているのか分かりません。

誰かが間違っていることを知っていますか?

ありがとうございました。

答えて

1

問題は、データセットをIDでマージしていますが、両方のデータセットに変数VAR1-VAR4があることです。したがって、両方のデータセットが観測に寄与する場合、MERGEステートメントで最後にリストされたものが「勝つ」でしょう。

あなたがこれまでに見たことがない理由は、通常、2つのデータセットをマージするときに共通の変数がキー変数だけであるためです。したがって、第1のデータセットから読み取られた値が第2のデータセットから読み取られた値によって上書きされるという事実は重要ではありません。

あなたが望むものを得るには、代わりにUPDATEステートメントを使用できます。更新で値が欠損値に置き換えられることはありません。基本的に、マスターデータセットにトランザクションを適用するように設計されています。

各IDはDATASET1で1つしか観測されていないようですので、マスターデータセットとしてDATASEt1を使用できます。

data want ; 
    update dataset1 dataset2 ; 
    by id ; 
run;