I have a dataset with values like this (it is a character with length of 7)
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.
A simple loop could do it:
do while (length(var) < 5);
var = '0' || var;
end;
A simple loop could do it:
do while (length(var) < 5);
var = '0' || var;
end;
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
@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...
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.
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;
Available on demand!
Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.
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.