如何在SAS中比较两个表中一列的匹配值

  • 本文关键字:一列 两个 比较 SAS sas
  • 更新时间 :
  • 英文 :


我有一个源表,其中包含约40000000个唯一/不同的条目,还有一个新表,其中含有约80000000个唯一/独特的条目,每个条目都有一列。

我需要在新表中创建一个标志列,如果源表中也存在相应观察的唯一条目(具有匹配项(,则显示1,如果没有匹配项,则显示0。

我该如何最有效地完成这项工作?

使用proc-sql是不可避免的,还是可以单独使用SAS来解决?

要向数据集添加新变量,需要创建一个新的数据集。假设数据已经在关键变量上排序,只需执行MERGE即可。您可以使用IN=数据集选项来检查哪些数据集对合并有贡献。

data want ;
merge new(in=innew) old(in=inold);
by key_var;
if innew;
new_var = inold;
run;

以下是我的解决方案供您参考:

/*step1: create a new dataset containing unique values of your new table*/
data new1;
set you_new_table(keep=var1 var2 var3...varx);
proc sort nodup;
by var1 var2 var3...varx;
run;
/*step2: create a new dataset containing unique values of your old table*/
data old1;
set you_old_table(keep=var1 var2 var3...varx);
proc sort nodup;
by var1 var2 var3...varx;
run;
/*step3: merge the two table that just created (inner join)*/
data compare1;
merge old1(in=a) new1(in=b);
by var1 var2 var3...varx;
if a and b;
proc sort;
by var1 var2 var3...varx;
run;
/*step4: merge the inner join dataset with the new source table and generate the flag*/
data new2;
set you_new_table;
proc sort;
by var1 var2 var3...varx;
run;
data new3;
/*merge new2(in=a) new1(in=b); sry, a mistake, shame.*/
merge new2(in=a) compare1(in=b);
by var1 var2 var3...varx;
if a;
if b then flag=1;
else flag=0;
run;

最新更新