Hello all,
I've got a dataset (a) with the following characters:
211221222223215
133122111
822823
811811811823883884
215
I now want to create a space between after every third position. So the new dataset (b) would be like:
211 221 222 223 215
133 122 111
822 823
811 811 811 823 883 884
215
(the actual list is about 5000 observations)
I have tried the prxchange function and something with an array, but its not working.
Hopefully you have some ideas wich i can try?
Thanks in advance
Use a do loop and substr():
data have;
input string :$30.;
cards;
211221222223215
133122111
822823
811811811823883884
215
;
run;
data want (rename=(newstring=string));
set have;
i = 1;
length newstring $30;
do until (i > length(string));
newstring = catx(' ',newstring,substr(string,i,3));
i + 3;
end;
drop i string;
run;
Use a do loop and substr():
data have;
input string :$30.;
cards;
211221222223215
133122111
822823
811811811823883884
215
;
run;
data want (rename=(newstring=string));
set have;
i = 1;
length newstring $30;
do until (i > length(string));
newstring = catx(' ',newstring,substr(string,i,3));
i + 3;
end;
drop i string;
run;
It works
Thanks a lot!
data have;
input string :$30.;
want=prxchange('s/(\d\d\d)/$1 /',-1,string);
cards;
211221222223215
133122111
822823
811811811823883884
215
;
run;
proc print;run;
Don't miss out on SAS Innovate - Register now for the FREE Livestream!
Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.