Hi All,
I'm trying to create macros that create month names
l need the macro to be able to create the exact last month even though if it last year.
last time I created this macro to create last month # by the macro below but I also need the month name too
%let lastmonth1=%sysfunc(month(%sysfunc(intnx(month,%sysfunc(today()),-1,s))));
%put &lastmonth1;
Use the MONNAME. format in the SYSFUNC() as the second parameter. See the doucmentstion for INTNX and SYSFUNC so you can see how to use it.
@mona4u wrote:
Hi All,
I'm trying to create macros that create month names
l need the macro to be able to create the exact last month even though if it last year.
last time I created this macro to create last month # by the macro below but I also need the month name too
%let lastmonth1=%sysfunc(month(%sysfunc(intnx(month,%sysfunc(today()),-1,s))));
%put &lastmonth1;
Use the MONNAME. format in the SYSFUNC() as the second parameter. See the doucmentstion for INTNX and SYSFUNC so you can see how to use it.
@mona4u wrote:
Hi All,
I'm trying to create macros that create month names
l need the macro to be able to create the exact last month even though if it last year.
last time I created this macro to create last month # by the macro below but I also need the month name too
%let lastmonth1=%sysfunc(month(%sysfunc(intnx(month,%sysfunc(today()),-1,s))));
%put &lastmonth1;
Use the WORDDAT format and parse out the name of the month.
%let lastmonth1=%scan(%sysfunc(intnx(month,%sysfunc(today()),-1),worddat),1) ;
didn't work
@mona4u wrote:
didn't work
Two problems. (1) the format name is really WORDDATE (not sure when SAS started creating format names with more than 7 characters?). (2) The WORDDATE (and also the MONNAME) format add leading spaces which seem to really confuse the %SCAN() function when trying to process in single nested call.
So use %Qsysfunc() instead to quote the comma and leading spaces. Then the %SCAN() function works.
%let lastmonth=%scan(%qsysfunc(intnx(month,&today,-1),worddate),1);
@Tom wrote:
@mona4u wrote:didn't work
Two problems. (1) the format name is really WORDDATE (not sure when SAS started creating format names with more than 7 characters?). (2) The WORDDATE (and also the MONNAME) format add leading spaces which seem to really confuse the %SCAN() function when trying to process in single nested call.
So use %Qsysfunc() instead to quote the comma and leading spaces. Then the %SCAN() function works.
%let lastmonth=%scan(%qsysfunc(intnx(month,&today,-1),worddate),1);this is what I tried and it works
%let lastmonthn1=%sysfunc(intnx(month,%sysfunc(today()),-1),MONNAME.);
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!
Still thinking about your presentation idea? The submission deadline has been extended to Friday, Nov. 14, at 11:59 p.m. ET.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.