0

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

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

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

4

1 回答 1

1

使用 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;
于 2013-11-05T22:17:30.317 回答