Remember that by default, numeric variables are right justified. That will never put the dollar sign in a fixed position (unless, of course, all your numbers are the same number of digits). The only way to get the dollar sign into a "fixed" position is to turn your number into a character string and then put the $ in front of the character string (see CHARDOL variable and compare how it looks in LISTING vs ODS HTML).
If you left justify the number, using a PICTURE format, you may find the dollar signs lining up.
The program below makes some data and by comparing the ODS HTML and the LISTING output, you will see the difference between the outputs and perhaps, depending on what you want to create, you will find an answer to your question.
My tendency would be to leave the $ off the rows and only put a $ on the last summary row, instead of trying to force a lined up $ (using call define). The character variable solution looks attractive, but then you can't summarize on a character variable -- so that's a down side. And depending on your client application in which this format is being used the picture format or character variable may not align the way you want anyway.
So there's nothing that can remain a numeric dollar format, yet display with a nicely arranged dollar sign on the left. Well, darn it! I understand what you're saying about things lining up..... too bad there's not something there in SAS that'll transcend from one format to another and still look cosmetically nice!
I appreciate your information and thanks many times over!
Well, I understand your disappointment, but to me, having a dollar sign all lined up on every report line would be visually distracting. I like the look of this output with the dollar sign on the summary report line instead of on every report line.
proc report data=sashelp.shoes nowd;
where region = 'Africa';
column region product sales;
define region /group;
define product /group;
define sales /sum f=comma14.2;
rbreak after /summarize;
if _break_ = '_RBREAK_' then do;