here is a version using lowcase "o" as the non-numeric in place of your second decimal place. Just change it to uppercase "O" to get closer to what you seek[pre]proc format ;
picture crazy (round)
-1e10 < 0= '000,000,000,001.1o'( prefix='$-' )
0- <1e10= '000,000,000,001.1o'( prefix='$' )
other = best17.
;
run;
data;
do num = (0.1-1e10) to 0 by 123456700.89
, 1.234 to 1e10 by 123456700.89 ;
put num=comma19.2 num crazy. ;
end;
run;
[/pre]
Some of the output looks like[PRE] num=-9,999,999,999.90 $-9,999,999,999.9o
num=-9,876,543,299.01 $-9,876,543,299.0o
num=-9,753,086,598.12 $-9,753,086,598.1o
num=-9,629,629,897.23 $-9,629,629,897.2o
num=-246,920,629.59 $-246,920,629.6o
num=-123,463,928.70 $-123,463,928.7o
num=-7,227.81 $-7,227.8o
num=1.23 $1.2o
num=123,456,702.12 $123,456,702.1o
num=246,913,403.01 $246,913,403.0o
num=3,950,614,429.71 $3,950,614,429.7o
num=4,074,071,130.60 $4,074,071,130.6o
num=4,197,527,831.49 $4,197,527,831.5o
num=4,320,984,532.38 $4,320,984,532.4o
[/PRE] you need to be careful to have enough room in the picture for the largest / widest values likely to turn up in your data.
Good luck
PeterC