|
data test1;
input var1 $ var2 $ @@;
cards;
A B
B A
B C
C B
C D
D C
E F
E H
F E
F G
G F
H E
;run;
data test2;
set test1(keep = var1 rename=(var1=var))
test1(keep = var2 rename=(var2=var));
run;
proc sort data = test2 nodupkey; by var; run;
proc sort data = test1 nodupkey; by _all_; run;
%macro test_macro();
data _null_;
set test2 nobs=n;
call symput(cats('v',_n_), var);
if _n_ = n then do;
call symput('n' ,n);
stop;
end;
run;
data test3(drop = var1-var2 var_add);
if 0 then set test1;
if _n_ = 1 then do;
dcl hash h(dataset:"test1");
h.definekey("var1","var2");
h.definedata("var1","var2");
h.definedone();
end;
set test2;
%do ii = 1 %to &n.;
_&&v&ii.. = 0;
%end;
%do ii = 1 %to &n.;
var_add = compress("&&v&ii..");
if h.find(key:var, key:var_add) = 0 then _&&v&ii.. = 1;
%end;
run;
%mend;
%test_macro();
|