Hey gsk, is this what you mean? I agree that a data step is most suitable but I wrote a macro as well. It's all very much tailored this this situation, not at all general. %let list = 001 002 003 004;
data have;
input @1 subjects $10.;
cards;
SUBJ-001-M
SUBJ-002-J
SUBJ-005-K
SUBJ-007-K
SUBJ-004-N
;
run;
data want(drop=s1 s2 s3);
set have;
s1 = scan(subjects,1,"-");
s2 = scan(subjects,2,"-");
s3 = scan(subjects,3,"-");
if s2 in (&list) then subjects=catx("-",s1,s3);
run;
*or if you like a macro...;
%macro fix_subj(dsin=,dsout=,subjvar=,mylist=);
data &dsout(drop=s1 s2 s3);
set &dsin;
s1 = scan(&subjvar,1,"-");
s2 = scan(&subjvar,2,"-");
s3 = scan(&subjvar,3,"-");
if s2 in (&mylist) then &subjvar=catx("-",s1,s3);
run;
%mend;
%fix_subj(dsin=have,dsout=want,subjvar=subjects,mylist=&list); -unison
... View more