I'll pull that together, thanks.
In the meantime, from googling I found the "problem" (apparently it's by design) explained well here (by Lauren Haworth, to give her credit):
"PROC TABULATE drops all observations that have missing data on any of the CLASS variables in your table. This means that if you have one classification with a lot of missing data, you’ll lose these observations for all of the other classification variables as well. Even if the other classifications have valid data, these observations will be dropped from the entire table."
I don't want to resort to using either of the options she offers as solutions - to using 'missing' and live with it, or to break apart the bigger table into multiple smaller tables.