我有两个数据集(d1和d2),我想根据个别特定标识符(ind_ID)进行合并。问题是在某些情况下,同一个ind_ID在一个或两个数据集中出现两次(其他字段不同)。
我在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 :(得分:0)
如果你想在合并后识别'正确'的配对行,那么现在进行多对多合并可能是你最好的选择: -
proc sql;
create table out as
select d1.*, d2.*
from d1 full outer join d2
on d1.ind_id = d2.ind_id;
quit;
我认为应该给出匹配行的所有组合。
答案 1 :(得分:0)
我会在合并之前添加一个步骤,只选择正确的'来自一个(或两个)表的行。然后像往常一样执行合并。
获得正确的信息后,只需更新此步骤即可更正'行确实是你想要保留的行。
答案 2 :(得分:0)
在合并两个数据集之前,您可以使用proc sort从d1中删除具有重复值的ind_id的观察值:
proc sort data=dl out=d1a nodupkey;
by id;
run;
这输出表d1a,它没有ind_id的重复值。然后将d1a与d2合并。