私は変数で繰り返されているが、不等な行数の2つのデータセットを一緒にマージしたい。 SASでは、デフォルトの動作として、一致しないすべての行の値が保持されます。例えば多対多のSASマージで一致するものがない場合、どのようにして保持された値を不足に設定しますか?
:
data a;
input i x y;
datalines;
1 1 5
1 2 6
1 3 7
1 4 8
;
run;
data b;
input i f g $;
datalines;
1 9 aa
1 8 bb
;
run;
ここセットa
セットb
2つだけを有している、可変i
によって4つの行を有します。変数i
によると、単にマージ
はこれを生成します。
data c;
merge a b;
by i;
run;
Obs i x y f g
1 1 1 5 9 aa
2 1 2 6 8 bb
3 1 3 7 8 bb
4 1 4 8 8 bb
あなたは、彼らがデータセットの試合を持っていなかったので、変数f
とg
OBS 3と4の値が保持されていることがわかりますa
。私が作るしようとしています何
は、この出力されます:
Obs i x y f g
1 1 1 5 9 aa
2 1 2 6 8 bb
3 1 3 7 .
4 1 4 8 .
私はSAS 9.4を使用していますが、これは私が試したものです:
data c;
if _n_>1 then do;
array num{*} _numeric_;
array char{*} _character_;
call missing(of num{*});
call missing(of char{*});
end;
merge a b;
by i;
run;
私の考えはすべてのためにということです行の最初の後に、すべての変数を欠落に設定したいので、一致する行がない場合は値が上書きされずに失われてしまいます。これにより、保持された値が削除されます。
二行目ではPDVを作成する必要があり、すべてのメタデータがこれらの配列を作成し、行方不明にそれらを設定するために利用可能でなければならないが、私はこのエラーを取得しています:修正する方法について
WARNING: Defining an array with zero elements.
任意の提案このコードまたはトリックを行う他のコード?