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.
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
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.