0

同じ変数名を持つ複数のデータセット (数百) があり、それらをキーでマージしたい場合、キーではない変数に対してどの変数の値を取るかを制御する簡単な方法はありますか? これを行う1つの方法は、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

これは、最も頻度の高い値と一致するためです。

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 に答える