I do have a date macro but it creates a lot of variables, so I have written a quick DATA _NULL_, see below if that fits your need? Note that it is assumed that you are happy with SAS's logic of the week start to end i.e. Sunday to Saturday.
data _null_;
TODAY = today();
*first day of current month (cm);
call symputx('FIRST_DAY_CM',put(intnx('month',TODAY,0,'b'),date9.),'g');
*last day of current month (cm);
call symputx('LAST_DAY_CM',put(intnx('month',TODAY,0,'e'),date9.),'g');
*first day of previous month (pm);
call symputx('FIRST_DAY_PM',put(intnx('month',TODAY,-1,'b'),date9.),'g');
*last day of previous month (pm);
call symputx('LAST_DAY_PM',put(intnx('month',TODAY,-1,'e'),date9.),'g');
*first day of current week (cw);
call symputx('FIRST_DAY_CW',put(intnx('week',TODAY,0,'b'),date9.),'g');
*last day of current week (cw);
call symputx('LAST_DAY_CW',put(intnx('week',TODAY,0,'e'),date9.),'g');
*first day of previous week (pw);
call symputx('FIRST_DAY_PW',put(intnx('week',TODAY,-1,'b'),date9.),'g');
*last day of previous week (pw);
call symputx('LAST_DAY_PW',put(intnx('week',TODAY,-1,'e'),date9.),'g');
*Last Saturday of previous week (pw);
call symputx('LAST_SAT_PW',put(intnx('week.7',TODAY,0,'b'),date9.),'g');
run;
%put _global_;
... View more