SAS中两个表中的公用值(无Proc SQL)

时间:2018-10-06 01:11:04

标签: sas

此刻我正在学习SAS,我想知道如何在不使用任何SQL的情况下联接两个表,而我只需要在两个表中获取公共值即可。

两个表都有一个共同的唯一ID。这些表也没有公共变量。 请不要提供任何已有的文档链接,我知道合并。我正在尝试使用IN运算符。

Table 1 : Screenshot

Table 2 : Screenshot

说明:第一个表有157条记录,另一个表有161条记录。 我尝试搜索解决方案,但没有得到任何解决方案。请参考解决方案。

谢谢!

1 个答案:

答案 0 :(得分:4)

在DATA步骤中,您将需要使用MERGE语句和IN=选项,该选项会设置一些标志,指示对程序数据向量(PDV)当前状态的“贡献”。

data want;
   merge
     have1 (in=_from1)
     have2 (in=_from2)
   ;
   by uniqueid; * variable of same name, type and length should be in have1 and have2;
   if _from1 and _from2; * subsetting if;
run;

DATA步骤是一个隐式循环。 MERGE会自动通过贡献数据进行读取,并同步BY变量。

当DATA步骤没有显式的OUTPUT语句时,当控制到达该步骤的底部时,PDV中的值将存在一个隐式OUPUT。因此,如果没有if的if称为子集,因为当两个标志都为真(或者当数据来自两个表且具有相同的键值)时,控制仅经过if(并且到达隐式输出的底部)