And here an approach using a format. I've also removed the "leave" statement in the loop as it is not needed. A "delete" has an implicit "return" so once the "delete" gets executed SAS starts immediately with the next iteration of the data step (an though not continuing any further looping). data have; informat field1-field5 $2.; input id field1-field5; cards; 1 AA FF 11 12 CC 2 DD 25 14 XX YY 3 DD EE FF 25 CC 4 AA BB DD DD EE ; run; data exclusion_list; input _excl_code :$2.; datalines; AA BB ; run; /*create a format for exclusions */ data fmt_source; set exclusion_list (rename=(_excl_code=start)) end=last; retain fmtname '$Exclude' type 'c' label '1'; output; if last then do; hlo='o'; label='0'; output; end; run; proc format cntlin=fmt_source; run; data want (drop=_:); set have; array field{*} field1-field5; do _i = 1 to dim(field); if put(field[_i],$Exclude.) = '1' then delete; end; run;
... View more