/*1*/
proc contents data=test1 out=sdetail (keep=name) noprint;
run;
data sdetail;
set sdetail;
name=upcase(name);
run;
data test7;
if 0 then set test2 sdetail(keep=name);
if _n_=1 then do;
declare hash myhash(dataset:'sdetail');
myhash.definekey('name');
myhash.definedone();
end;
set test2;
length temp1 $32;
length temp2 $32;
n1=countw(List, ',');n2=countw(Freq, ',');
Flag1=1;Flag2=1;
do i=1 to n1;
temp1=upcase(scan(List,i,','));
if myhash.check(key:temp1)^=0 and temp1^='' then do;
Flag1=0;leave;
end;
end;
if Flag1=1 then do i=1 to n2;
temp2=upcase(scan(Freq,i,','));
if myhash.check(key:temp2)^=0 and temp2^='' then do;
Flag2=0;leave;
end;
end;
if Flag1 and Flag2;
keep List Freq;
run;
/* 2*/
proc contents data=test1 out=sdetail (keep=name) noprint;
run;
%let strFieldList=;
proc sql noprint;
select name into :strFieldList separated by ',' from sdetail;
quit;
%put &strFieldList;
data test7;
set test2;
length temp1 $32;
length temp2 $32;
n1=countw(List, ',');n2=countw(Freq, ',');
Flag1=1;Flag2=1;
do i=1 to n1;
temp1=scan(List,i,',');
if temp1^='' and find("&strFieldList",temp1,'it')=0 then do;
Flag1=0;leave;
end;
end;
if Flag1=1 then do i=1 to n2;
temp2=scan(Freq,i,',');
if temp2^='' and find("&strFieldList",temp2,'it')=0 then do;
Flag2=0;leave;
end;
end;
if Flag1 and Flag2;
keep List Freq;
run;
... View more