2014-05-04 221 views
0

我有兩個數據集(d1和d2),我想根據個別特定標識符(ind_ID)進行合併。問題是有些情況下,一個或兩個數據集中出現兩次相同的ind_ID(其他字段不同)。SAS合併重複觀察

我在d1中選擇一個重複項以合併兩個重複項在d2中,但我不確定如何告訴SAS只選擇d1中的一個觀察值並將它合併到d2中。我是這樣做的,因爲我還沒有被告知哪個觀察結果是正確的,我希望繼續我的編碼,直到信息進入。

到目前爲止,我嘗試了基於合併貸款編號(第一個示例代碼)以及使用合併標識符(第二個示例代碼)。似乎兩者都有相同的結果,並且SAS只是隨機選擇重複項中的哪個ind_ID與哪個重複項合併。

缺少手動檢查數據和刪除不想合併的觀察值,有沒有辦法做到這一點?

data merge_test; 
merge d1 d2; 
by ind_ID; 
run; 

data merge12; 
merge d1(in=a) d2(in=b); 
by ind_ID; 
if a and b; 
mergecheck = compress(a||b); 
run; 

回答

0

如果你想找出「正確」的成對的行合併後,然後做了許多一對多現在合併也許是你最好的選擇: -

proc sql; 

    create table out as 
    select d1.*, d2.* 
    from d1 full outer join d2 
    on d1.ind_id = d2.ind_id; 

quit; 

筆者認爲應給出匹配行的所有組合。

0

我會在合併之前添加一個步驟,只從一個(或兩個)表中選擇「正確的」行。然後像平常一樣執行合併。

一旦你得到正確的信息,只需更新此步驟,以便'正確'的行確實是你想保留的行。

0

之前合併這兩個數據集,您可以從D1使用PROC排序中刪除與ind_id重複值的觀察:

proc sort data=dl out=d1a nodupkey; 
    by id; 
run; 

此輸出具有不重複的值ind_id表D1A。然後,將d1a與d2合併。