Data is helpful.
Proc tabulate is a very likely candidate as I find it easier to nest things vertically.
And what goes into the intersection of month and site columns?
Here is an example of a similar report using the SASHELP.STOCKS set that you likely have available. The first data step basically just adds a month variable.
data fortable;
set sashelp.stocks;
month=month(date);
run;
proc tabulate data=fortable;
class date month stock;
format date year4.;
var close;
table month,
date*stock=' '*close="Max close"*max=''*f=dollar10.2
/misstext=' '
;
run;
The =' ' that appear are just to modify the default column heading text. When it is '' or ' ' then that suppresses a level of the column (or row) heading. This report show the maximum closing price of each Stock, which would be your SITE variable, for each month.
I am using the format YEAR4. on a date value to just display the year.