Hello everybody,
I have a string variable with varying lengths and values go like this -
Var1
1
-1-3
456
-6-7-8
What I am trying to achieve right here is to extract the number along with their signs and create a new variable for each integer.
Here is the layout I am hoping to look at:
var1 var2 var 3
1
-1 -3
4 5 6
-6 -7 -8
Any help with this would be greatly appreciated.
Thank you
There are probably more elegant ways to do this but this seems to work:
data have;
input string $;
cards;
1
-1-3
456
-6-7-8
;
run;
data want;
keep string var1 - var3;
set have;
array vars var1 - var3;
start = 1;
do i = 1 to 3;
pos = anydigit(string, start);
if pos then do;
if pos = start then vars(i) = input(substr(string, start,1), 1.);
else vars(i) = input(substr(string, start, 2), 2.);
start = pos + 1;
end;
end;
run;
There are probably more elegant ways to do this but this seems to work:
data have;
input string $;
cards;
1
-1-3
456
-6-7-8
;
run;
data want;
keep string var1 - var3;
set have;
array vars var1 - var3;
start = 1;
do i = 1 to 3;
pos = anydigit(string, start);
if pos then do;
if pos = start then vars(i) = input(substr(string, start,1), 1.);
else vars(i) = input(substr(string, start, 2), 2.);
start = pos + 1;
end;
end;
run;
Wonderful! The code worked like a miracle. Thank you very much!
data have;
input string $;
cards;
1
-1-3
456
-6-7-8
;
run;
data temp;
set have;
id+1;
temp=prxchange('s/(-?\d)/ \1 /',-1,string);
do i=1 to countw(temp,' ');
value=scan(temp,i,' ');output;
end;
keep id value;
run;
proc transpose data=temp out=want;
by id;
var value;
run;
It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.
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.
Ready to level-up your skills? Choose your own adventure.