如何在SAS中引用两个数据集
How to reference two dataset in SAS
我有两个独立的数据集 Data1
和 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,
如果您没有任何重复的名称,合并将很容易做到这一点,例如
data original;
input name .;
cards;
Richard
Tommy
Apple
John
;
run;
data current;
input name :. newname .;
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
数据步骤语句或带有 insert
语句的 proc sql
- 但它们的语法更复杂。
假设您熟悉 SQL-left join 语法,您可以使用 coalesce()
函数来实现此目的。它只是 returns 第一个非缺失值。
使用@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;
我有两个独立的数据集 Data1
和 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,
如果您没有任何重复的名称,合并将很容易做到这一点,例如
data original;
input name .;
cards;
Richard
Tommy
Apple
John
;
run;
data current;
input name :. newname .;
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
数据步骤语句或带有 insert
语句的 proc sql
- 但它们的语法更复杂。
假设您熟悉 SQL-left join 语法,您可以使用 coalesce()
函数来实现此目的。它只是 returns 第一个非缺失值。
使用@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;