【发布时间】:2016-08-15 22:01:24
【问题描述】:
我正在创建一个哈希合并宏,我想为合并表创建一个数据集,并为缺失值创建一个数据集。这是我正在寻找的常规合并示例。
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;
【问题讨论】:
-
您是否仅将其用于一对一合并?
-
不,我将使用它进行不同的合并。