I'm still not sure what you're wanting here. However, the easiest way to dynamically calculate the start and end of a CALENDAR month is with the INTNX() function. INTNX('MONTH',date,0,'b') will give you the first day for the month of the variable date as a SAS date value. There are other ways to do this, and they work because the first day in a calendar month is always 1. End of calendar months is trickier, and this is where the INTNX function is useful: INTNX('MONTH',date,0,'e'), provides the last day for the month of variable date as a SAS date value, which is what you are using in your CASE statements. Please note the quotation marks, they are required. MONTH is the SAS interval name, and 'b' and 'e' are called "alignment operators" and they signify the beginning and the end of the interval.
... View more