SAS合并重复观察

时间:2014-05-04 14:53:04

标签: sas

我有两个数据集(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;

3 个答案:

答案 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合并。