03-02-2017 08:47 PM
The below codes is working fine. Just want to know if there is any way to have to same result without RENAME and DROP variables? Thanks.
INPUT ID ;
ID1 = PUT(ID,z7.);
03-02-2017 10:58 PM - edited 03-02-2017 11:00 PM
Do it in a single step:
DATA A; INFILE CARDS; INPUT ID :$7. ; id = translate(right(id),"0"," "); CARDS; 3453 123162 124171 1241761 ;
03-03-2017 04:05 AM
@PGStats, you probably know that input a CHAR type is left aligned.
DATA A; INFILE CARDS; INPUT ID :$7. ; id = translate(right(id),"0"," "); CARDS; 3453 ; run;
will create ID='3453000' while the equivalent to the number 3453 is '0003453';
In this case, it can be done by:
DATA A; INFILE CARDS; INPUT ID :$7. ; id = put(input(id,best7.),z7.); CARDS; 3453 ; run;
03-03-2017 10:42 AM
Hi @Shmuel, you are right in saying that input reads left aligned, which is why I use the right function to make it right aligned before replacing the spaces with leading zeros.
03-03-2017 04:39 AM
Sorry @Shmuel that may not be 100% correct. It depends on what the OP user is expecting from the variable. If they really do want a text field then I have no problem with it. If however they just want that data as z7. then the simplest method is to apply the format to the already existing numeric data:
data a; infile cards; input id; format id z7.; /* <-- this is the only thing needed to display as z7. */ cards; 3453 123162 124171 1241761 ; run;
OP: Please do not code all in upper case, it really makes code so much harder to look at.
03-03-2017 05:10 AM
@RW9, you are right if the target was just displaying the number with leading zeroes.
The original query included code:
DATA A(RENAME=(ID1=ID)); SET A; ID1 = PUT(ID,z7.); DROP ID; RUN;
Which I understand that the target is changing type of variable in a dataset.
Need further help from the community? Please ask a new question.