为便于大家指教,我附上完整程序。
data test;
input var1$ var2$ ;
cards;
aab a
aac b
def ac
efg ab
bfc aac
;
run;
data test1;
set test;
keep var1;
run;
data test2;
set test;
keep var2;
run;
%Macro recog(objecet,list,var1,var2);
proc sql noprint;
select distinct &var2 into :chkvar separated by '|'
from &list;
quit;
data &objecet;
set &objecet;
retain pattern n;
if _n_=1 then do;
pattern=prxparse("/(&chkvar)/");
n=count("&chkvar",'|')+1;
end;
if prxmatch(pattern,&var1) then
do i=1 to n;
match=scan("&chkvar",i,'|');
if index(&var1,strip(match)) then output;
end;
else
do;
delete; /*match="无匹配信息";*/
output;
end;
drop pattern n i;
run;
%mend recog;
%recog(test1,test2,var1,var2);
|