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;
Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!
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.
Ready to level-up your skills? Choose your own adventure.