Hi, well, I think there is a solution to your question, but I'm not sure it's entirely a simple solution.
According to the documentation, FORMAT= is working as designed. It is advertised as only formatting the frequencies.
Normally, to change the format of a column produced by a procedure, you would change the TABLE template used to control the procedure's output. And this is the approach I would recommend if you were producing ONE-WAY tables. HOWEVER, you want to produce a crosstab from PROC FREQ and, the bad news is that there is no TABLE template for PROC FREQ crosstabs.
So, the first thing is to try this:
[pre]
proc freq data=dsn;
table var_a * var_b/ crosslist format=nlnum15.0;
run;
[/pre]
The good news is that IF you can live with the way this output looks, then you CAN change the TABLE template (BASE.FREQ.CROSSLIST) for this output in order to use your NLNUM format with the other columns on the report.
Now, that means you have a new challenge:
1) deciding if can you live with the CROSSLIST form of the output and
2) if so, then learning the way to change the TABLE template.
This SAS Sample shows how to change a simple PROC FREQ table:
http://support.sas.com/ctx/samples/index.jsp?sid=285
(so you would get the idea of how you'd go about making a change)
And here are some other links that show changing table templates (although none of them change the CROSSLIST template, but you should be able to get an idea of how to do it from these examples):
http://support.sas.com/faq/032/FAQ03253.html or
http://support.sas.com/faq/032/FAQ03254.html
OR you could abandon PROC FREQ entirely and use PROC TABULATE as described in this sample:
http://support.sas.com/ctx/samples/index.jsp?sid=1643&tab=details
OR you could contact Tech Support for help regarding the best approach based on your data, your destination requirements. Tech Support would help you with a TABLE template if you are not familiar with how PROC TEMPLATE works.
Good luck!
cynthia