我有两个单独的数据集Data2
和Data1
。 Data2
包含一组名称。 Data2
包含已更改的名称(原始名称和新名称)。如何使用Data1
使用新名称更新Data1:
Richard,
Tommy,
Apple,
John,
Data2:
(original:first column) Richard;
(current: second column) Big Richard
Target:
Big Richard,
Tommy,
Apple,
John,
?
table1
答案 0 :(得分:1)
假设您熟悉SQL-left连接语法,可以使用coalesce()
函数来实现此目的。它只返回第一个非缺失值。
使用@ user667489的样本数据集:
proc sql noprint;
create table want as
select coalesce(b.newname,a.name) as name
from original a
left join current b on b.name = a.name
;
quit;
答案 1 :(得分:0)
如果您没有任何重复的名称,合并将很容易实现,例如
data original;
input name $16.;
cards;
Richard
Tommy
Apple
John
;
run;
data current;
input name :$16. newname $16.;
cards;
Richard Big Richard
;
run;
proc sort data=current;
by name;
run;
proc sort data=original;
by name;
run;
data new;
merge original current(in=b);
by name;
if b then name=newname;
drop newname;
run;
如果您希望直接覆盖原始数据集,还有其他各种方法可以执行此操作 - 例如modify
数据步骤语句或带有proc sql
语句的insert
- 但这些语句的语法更为繁琐。