ハッシュマージマクロを作成中です。マージされたテーブルのデータセットと欠損値のデータセットを作成したいと思います。ここで私が定期的なマージで探しているものの例です。SASハッシュマージマクロ - 複数のデータセットを出力する
data &onto miss&varnm xtra&varnm;
merge &onto(in=in1) fr2(in=in2);
by &byvars;
if in2 then from = "&from";
else from = "&onto";
if in1 and in2 then output &onto;
else if in1 and not in2 then output &onto miss&varnm;
else if not in1 and in2 then output xtra&varnm;
run;
私はかなりよく実行されているマージを持っていると思いますが、私は任意の助けをいただければ幸いですので、「欠けている」データセットを得ることについて行くするかどうかはわかりません。あなたは簡単にxtra
データセットを取得することはできませんあなたのハッシュオブジェクトを設定した方法で
%macro hashmerge(varnm,onto,from,byvars);
/* The inputs are the variables to merge,
the merge onto data set, the merge from
data set and the key(s). vanrnm and
byvars are set up to accept multiple inputs. */
%let data_vars = %trim (&varnm);
%let data_vars_a = %sysfunc(tranwrd(&data_vars.,%str(),%str(",")));
%let data_vars_b = %sysfunc(tranwrd(&data_vars.,%str(), %str(,)));
%let data_key = %trim (&byvars);
%let data_key = %sysfunc(tranwrd(&data_key.,%str(), %str(",")));
data &onto(drop=rc);
set &onto &from(keep=&varnm &byvars);
declare hash h_merge (dataset: "&from.");
rc = h_merge.DefineKey ("&data_key.");
rc = h_merge.DefineData ("&data_vars_a.");
rc = h_merge.DefineDone();
do until (eof);
set &onto end = eof;
call missing(&data_vars_b.);
rc = h_merge.find();
output;
end;
stop;
run;
%mend;
これは1対1マージでのみ使用していますか? – Quentin
いいえ、私は別のマージのためにこれを使用します。 –