是否有内置方法在SAS合并中选择非关键变量?

时间:2013-11-05 17:40:59

标签: sas

如果您有多个具有相同变量名称的数据集(数百个)并且希望通过键合并它们,是否有一种简单的方法可以控制变量的哪个值为非关键变量?执行此操作的一种方法是在merge语句上重命名,然后编写另一个步骤以使用这些重命名的变量来计算数组中最常用的值...但我真的想知道是否有内置的处理方法。例如:

data ds1;
    infile datalines dsd delimiter=' ';
    input var1 $ var2;
    datalines;
a 1
b 2
;
run;

data ds2;
    infile datalines dsd delimiter=' ';
    input var1 $ var2;
    datalines;
a 
b 2
;
run;

data ds3;
    infile datalines dsd delimiter=' ';
    input var1 $ var2;
    datalines;
a 1
b 
;
run;


data ds123;
    merge ds1 ds2 ds3;
    by var1;
run;

此代码将“选择”'最右边'var2,即数据集ds123:

a 1
b 

但我可能想要它:

a 1
b 2

因为这会匹配最常见的值。

1 个答案:

答案 0 :(得分:1)

使用SQL连接和coalesce函数。在coalesce中指定首选项顺序,将使用该顺序中的第一个非缺失顺序。

proc sql noprint;
create table ds123 as
   select a.var1,
          coalesce(a.var2,b.var2,c.var2) as var2
   from ds1 as a,
        ds2 as b,
        ds3 as c
   where a.var1 = b.var1
     and b.var1 = c.var1;
quit;