如何在SAS中引用两个数据集

How to reference two dataset in SAS

我有两个独立的数据集 Data1Data2Data1 包含一组名称。 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;