DATA Step, Macro, Functions and more

Adding zeros in front of values

Accepted Solution Solved
Reply
Frequent Contributor
Posts: 123
Accepted Solution

Adding zeros in front of values

I have a dataset with values like this (it is a character with length of 7)

 

AFF.PNG

 

What I want is this - IF the actual value is less than 5 digits, add zeros to the beginning of the value until it is 5 digits long. 


Accepted Solutions
Solution
‎04-24-2017 03:47 PM
Super User
Posts: 5,081

Re: Adding zeros in front of values

A simple loop could do it:

 

do while (length(var) < 5);

   var = '0' || var;

end;

View solution in original post


All Replies
PROC Star
Posts: 166

Re: Adding zeros in front of values

data want;
set have;
if length(var)<5 then var=reverse(substr(strip( reverse(var))||'00000000',1,5) ); 
run;
 
Regards,
Naveen Srinivasan
Solution
‎04-24-2017 03:47 PM
Super User
Posts: 5,081

Re: Adding zeros in front of values

A simple loop could do it:

 

do while (length(var) < 5);

   var = '0' || var;

end;

Contributor
Posts: 20

Re: Adding zeros in front of values

hi

the

 

variable is numeric so use formate option

 

DATA test_data1; 
input studyid ; 
format studyid z8.; 
cards;
543
243
15967
26484143651
5442
124
1
23
4423
;
run;

formate zw.

 

w means total how many digits you want with zeros

Frequent Contributor
Posts: 123

Re: Adding zeros in front of values

@Astounding How exactly does this work? How is the data step looping back to keep adding zeros - I get that there's the while condition, but say I have 123 which needs  2 zeros in front of it. Data step will go through the loop to put the first 0 in front. How does it come back to that observation to add another zero? I know it has to do with the condition and the PDV, just not sure of the details...

Super User
Posts: 5,081

Re: Adding zeros in front of values

It's the logic of DO WHILE.

 

After the first time through the loop a single zero has been added:  0123

 

The DO WHILE condition is still true, since the length is now 4.  So the loop executes a second time, adding another zero:  00123

 

Now the DO WHILE condition is false, so the loop ends.

Frequent Contributor
Posts: 93

Re: Adding zeros in front of values

DATA test_data1; 
length studyid $50;
input studyid $;  
cards;
543
243
15967
26484143651
5442
124
1
23
4423
;
run;

data test_data1;
set test_data1;
if length(studyid) < 5 THEN DO;
studyid = repeat('0',5-length(studyid)) || studyid;
END;
run;
☑ This topic is SOLVED.

Need further help from the community? Please ask a new question.

Discussion stats
  • 6 replies
  • 196 views
  • 5 likes
  • 5 in conversation