SAS:使用不同名称合并具有相同变量的两个数据集

时间:2018-05-04 15:27:44

标签: merge sas rename

我尝试过搜索这个问题,但我认为之前没有问过。

我正在研究跨两个数据集匹配特定客户端。两个数据集中都有一个变量,每个客户端都有一个唯一的标识符,这两个数据集中每个客户的唯一标识符都相同。

问题是,这个唯一标识符的变量名在两个数据集中都不同,所以我不确定如何合并它们?

任何帮助将不胜感激!

由于

3 个答案:

答案 0 :(得分:4)

在其中一个或两个合并数据集上使用rename=数据集选项,直到键值变量具有相同的变量名称。

data one;
  do id = 1 to 10;
    x = id;
    if mod(id,3)=0 then output;
  end;
run;

data two;
  do myid = 1 to 10;
    if mod(myid,2)=0 or myid > 7 then output;
  end;
run;

data want;
  merge
    one
    two (rename=(myid=id))
  ;
  by id;
run;

data want;
  merge
    one (rename=(id=commonid))
    two (rename=(myid=commonid))
  ;
  by commonid;
run;

答案 1 :(得分:2)

如果要保留标识符的不同变量名,请使用sas proc sql。

    proc sql;
        create table mergeddata as 
        select a.*, b.* from mydata1 as a full join
        my data2 as b on a.someid1=b.someid2;
    quit;

只是我的偏好,但我不赞成解决方案需要以任何方式修改基础数据,如果有办法避免这种情况。

答案 2 :(得分:0)

重命名其中一个ID以匹配下面的其他(rename=(id2=id))完整示例:

创建虚拟数据:

data t1; 
input id  Name $; 
cards; 
1 John
2 Jack
; 
run; 

data t2; 
input id2  title $; 
cards; 
1 Manager
2 Admin
3 Helpdesk
; 
run;

将ID2重命名为ID,然后执行合并:

data megered;
merge 
    t1
    t2 (rename=(id2=id))
    ;
by id;
run;

输出:

 id=1 Name=John title=Manager
 id=2 Name=Jack title=Admin 
 id=3 Name=  title=Helpdesk