My tendency would be to use PROC TABULATE, then. But you could also use PROC REPORT. The difference is that if you used TABULATE, you'd either have to use BY groups or a custom denominator and if you use REPORT, you'd have to use BY groups or a custom COMPUTE block. You really have several choices for how you'd approach this.
For example if you use TABULATE -without- a BY statement, then your TABLE statement might look like this:
[pre]
table phyname*(payer all),
mg_disp=' '*(sum*f=comma6. pctsum
*f=pct.);
[/pre]
however, if you used TABULATE -with- a BY statement, then your TABLE statement might look like this:
[pre]
by phyname;
. . . more code . . .
table phyname*(payer all),
mg_disp=' '*(sum*f=comma6. pctsum*f=pct.);
[/pre]
Since every BY group is treated as a whole entity, there is no need for a custom denominator for PCTSUM when you use BY group processing.
The only other thing is that if you want a percent sign in the calculated percent, you'd have to use a custom PICTURE format, too (because TABULATE does an automatic multiply by 100 and the regular PERCENTw.d format also does a multiply by 100 -- so you can't use the PERCENT format with TABULATE):
[pre]
proc format;
picture pct low-high='009.99%';
run;
[/pre]
cynthia