修改了code,d2里有性别和省份重复的,也一样可以匹配。亲测可行。
proc sort data=d2 nodupkey;
by name;
run;
DATA D2;
SET D2;
N=_N_;
RUN;
%MACRO DS(N);
PROC SQL;
CREATE TABLE DS&N AS
SELECT NAME, SEX, PROV
FROM D2
WHERE N=&N
UNION ALL
SELECT * FROM D1 WHERE CATS(SEX, PROV)IN
(SELECT CATS(SEX, PROV)
FROM D2
WHERE N=&N)
;
%MEND;
Data _null_;
set d2;
call execute('%DS('||N||');');
run;