Please correct my code?

Reply
Contributor
Posts: 56

Please correct my code?

data have;

length var1 $ 50 ;

input var1 $ ;

datalines;

pointofinterest

;

data want;

set have;

do i= 1 to length(var1);

newvar=substr(var1,i,1);

end;

run;

The output I am getting is newvar=t

I am looking to get the entire string pointofinterest output using the loop with i value being 16. Where am i wrong?

Respected Advisor
Posts: 3,063

Re: Please correct my code?

Does this do what you want?

data want;

set have;

do i= 1 to length(var1);

newvar=substr(var1,i,1);

output;

end;

run;

Contributor
Posts: 56

Re: Please correct my code?

No, not the explicit output statement..just the same pointofinterest..I am merely testing stuff to learn..it is giving me only the last letter t leaving out "pointofinteres"

Grand Advisor
Posts: 17,360

Re: Please correct my code?

That is the correct output.

newvar is recreated  every time you go through a loop iteration. 

So your last call is newvar=substr(var1, length(var1), 1) which is the last character.

Did you want to add each letter in the loop i.e.

p

po

poi

poin

...

pointofinterest

?

If so, look into a concatenate function - CATT, CAT, CATX, CATS

Esteemed Advisor
Posts: 6,669

Re: Please correct my code?

Try

data want;

set have;

length newvar $ 50; *necessary, otherwise newvar would only have a length of 8;

do i= 1 to length(var1);

substr(newvar,i,1)=substr(var1,i,1);

end;

run;

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
Ask a Question
Discussion stats
  • 4 replies
  • 195 views
  • 0 likes
  • 4 in conversation