sas - 数据步合并 PROC SQL 等效标记在哪个表记录中找到

标签 sas

我合并两个数据集如下:

data ds3;
  merge ds1(in=in1) ds2(in=in2);
  by mrgvar;
  if in1;
  if in2 then flag=1;
run;

如果我改为使用 PROC SQL 步骤来执行此操作,我该如何设置 flag 变量?

proc sql;
  create table ds3 as
  select a.*
        ,b.*
        ,???
  from ds1 as a
       left join
       ds2 as b
       on a.mrgvar=b.mrgvar;
quit;

最佳答案

一种常见的方法是将表别名与连接变量一起使用。

proc sql;
  create table ds3 as
  select a.*
        ,b.*
        ,case when b.mrgvar is null then 0 else 1 end as flag
  from ds1 as a
       left join
       ds2 as b
       on a.mrgvar=b.mrgvar;
quit;

达到那种效果 - 如果 b.mrgvar 为空/缺失,则它仅来自表 a。 (是的,您可以单独引用两者,即使它们基本相同并合并到结果表中。)

关于sas - 数据步合并 PROC SQL 等效标记在哪个表记录中找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26502040/

相关文章:

sql - 如何根据特征 ID 的最大值创建标记列?

sas - 宏变量: Apparent symbolic reference not resolved

sas - SAS 的字符串比较(不等于)语法

R:是否有与 SAS 的 intck 函数等效的函数?

带有中间名首字母的困惑名称变量的 SAS 数据清理

arrays - SAS:当未初始化的变量是数组的一部分时,为什么没有 'NOTE: variable is unitialized'?

R glm标准误差估计与SAS PROC GENMOD的差异

sas - 除了 PROC REG 之外,SAS 中的线性回归

sql - 优化不平等的左连接

excel - 使用 SAS 处理 Excel 中的大量列