Using SAS V8, how can I parse a character string into several smaller fields based on a delimeter character of '*' or '~'?
data have;
infile cards dsd;
length name $50.;
format name $char50.;
input name;
cards;
name1*name2*name3~name4
;
run;
data want;
set have;
name1=scan(name,1,'*~');
name2=scan(name,2,'*~');
name3=scan(name,3,'*~');
name4=scan(name,4,'*~');
run;
data have;
infile cards dsd;
length name $50.;
format name $char50.;
input name;
cards;
name1*name2*name3~name4
;
run;
data want;
set have;
name1=scan(name,1,'*~');
name2=scan(name,2,'*~');
name3=scan(name,3,'*~');
name4=scan(name,4,'*~');
run;
Thank you very much for the quick response!!!
Hi Cherric ,
I have a another automated way which you can try, here you dont have to type name if the string have 1000 names. .
data all;
drop string;
string = ' name1*name2*name3~name4*name5~name6 ';
do until(word=' ');
count+1;
word = scan(string, count,'*~');
output;
end;
run;
if you want it in horizontal way you can transpose the same
Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.
Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.
Learn the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.
Find more tutorials on the SAS Users YouTube channel.