我尝试过搜索这个问题,但我认为之前没有问过。
我正在研究跨两个数据集匹配特定客户端。两个数据集中都有一个变量,每个客户端都有一个唯一的标识符,这两个数据集中每个客户的唯一标识符都相同。
问题是,这个唯一标识符的变量名在两个数据集中都不同,所以我不确定如何合并它们?
任何帮助将不胜感激!
由于
答案 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