2014-05-04 60 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合并。