In the program below
proc format ;
picture mypct low-high='009.99%' (multiplier=100 ) ;
run;
data _null_;
do percent=1.8987,6.6920,0.3165;
put 'Default Format: ' percent= @36 'Using mypct: ' (percent) (mypct.) ;
end;
run;
the log shows:
Default Format: percent=1.8987 Using mypct: 1.89%
Default Format: percent=6.692 Using mypct: 6.69%
Default Format: percent=0.3165 Using mypct: 0.31%
Consider the first value (1.8987):
- First, the "multiplier=100" option converts 1.8987 to 189.87
- Then remember that the picture will be applied only to digits to the left of the decimal point, i.e. only to 189. I think this is where you are being thrown off. Ignoring the digits after the post-multiplier decimal provides a way to treat 1.8987 the same as 1.8900 (which would become 189 under "multiplier=100"). They both only have the same three digits to the left of the decimal point.
- Finally, applying '009.99%' picture to the digits 189, proceeding from right to left, yields 1.89%.
You can take a close look at the "multiplier=n" sections of PICTURE Statement