Please correct my code?

Reply
Contributor
Posts: 59

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?

Super User
Posts: 3,235

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: 59

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"

Super User
Posts: 19,151

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

Super User
Posts: 7,431

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
  • 204 views
  • 0 likes
  • 4 in conversation