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.