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

在SAS合并中是否有选择非关键变量的内置方法?,sas,Sas,如果您有多个具有相同变量名的数据集(数百个),并且希望通过一个键将它们合并,那么是否有一种简单的方法来控制非键变量的变量值?一种方法是对merge语句进行重命名,然后编写另一个步骤,使用这些重命名的变量计算数组中最频繁的值……但是我真的想知道是否有一种内置的方法来处理这个问题。例如: data ds1; infile datalines dsd delimiter=' '; input var1 $ var2; datalines; a 1 b 2 ; run; dat

如果您有多个具有相同变量名的数据集(数百个),并且希望通过一个键将它们合并,那么是否有一种简单的方法来控制非键变量的变量值?一种方法是对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

因为这将匹配最频繁的值。

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

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;

为什么不将它们全部附加在一起,然后执行
proc-means
,或者
proc-sql
groupby?是的,这样就可以了。非常感谢。