Я работаю над созданием макроса слияния хешей, и я хочу создать набор данных для объединенной таблицы и наборов данных для отсутствующих значений. Вот пример того, что я ищу с регулярным слиянием.SAS Hash Merge Macro - вывод нескольких наборов данных
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;
Я думаю, что у меня есть слияние работает довольно хорошо, но я не уверен, как идти о получении «отсутствует» наборы данных, так что любая помощь будет оценена.
%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;
Вы используете это только для взаимного объединения? – Quentin
Нет, я буду использовать это для разных слияний. –