【发布时间】:2018-05-04 15:27:44
【问题描述】:
我试过搜索这个问题,但我认为以前没有人问过这个问题。
我正在跨两个数据集匹配特定客户。两个数据集中都有一个变量,每个客户端都有一个唯一标识符,并且这个唯一标识符对于两个数据集中的每个客户端都是相同的。
问题是,这个唯一标识符的变量名在两个数据集中是不同的,所以我不确定如何合并它们?
任何帮助将不胜感激!
谢谢
【问题讨论】:
我试过搜索这个问题,但我认为以前没有人问过这个问题。
我正在跨两个数据集匹配特定客户。两个数据集中都有一个变量,每个客户端都有一个唯一标识符,并且这个唯一标识符对于两个数据集中的每个客户端都是相同的。
问题是,这个唯一标识符的变量名在两个数据集中是不同的,所以我不确定如何合并它们?
任何帮助将不胜感激!
谢谢
【问题讨论】:
在任一或两个合并数据集上使用 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;
【讨论】:
如果要为标识符保留不同的变量名,请使用 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;
只是我的一个偏好,但如果有办法避免这种情况,我不赞成需要以任何方式修改基础数据的解决方案。
【讨论】:
proc sql 用于小型数据集,但避免使用它用于大型数据集(1 GB+),因为 proc sql 性能不可靠。
重命名其中一个 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
【讨论】: