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.
proc tabulate data=fortable;
class date month stock;
format date year4.;
date*stock=' '*close="Max close"*max=''*f=dollar10.2
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.
Registration is open! SAS is returning to Vegas for an AI and analytics experience like no other! Whether you're an executive, manager, end user or SAS partner, SAS Innovate is designed for everyone on your team. Register for just $495 by 12/31/2023.
If you are interested in speaking, there is still time to submit a session idea. More details are posted on the website.