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.
DATA A;
INFILE CARDS;
INPUT ID ;
CARDS;
3453
123162
124171
1241761
;
RUN;
DATA A(RENAME=(ID1=ID));
SET A;
ID1 = PUT(ID,z7.);
DROP ID;
RUN;
In your output ID1 is numeric while ID is char type.
Your code is the easyiest way to bo done;
In your output ID1 is numeric while ID is char type.
Your code is the easyiest way to bo done;
Do it in a single step:
DATA A;
INFILE CARDS;
INPUT ID :$7. ;
id = translate(right(id),"0"," ");
CARDS;
3453
123162
124171
1241761
;
@PGStats, you probably know that input a CHAR type is left aligned.
Then
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;
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.
Hi @PGStats, you are right, I skiped the right in your code.
Any way, our debate is a good lesson to SAS starting users.
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.
@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.
Don't miss out on SAS Innovate - Register now for the FREE Livestream!
Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.
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.