DATA Step, Macro, Functions and more

creating a macro of month names

Accepted Solution Solved
Reply
Frequent Contributor
Posts: 149
Accepted Solution

creating a macro of month names

 

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;


Accepted Solutions
Solution
4 weeks ago
Super User
Posts: 23,224

Re: creating a macro of month names

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;


 

View solution in original post


All Replies
Solution
4 weeks ago
Super User
Posts: 23,224

Re: creating a macro of month names

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;


 

Super User
Super User
Posts: 7,929

Re: creating a macro of month names

Use the WORDDAT format and parse out the name of the month.

%let lastmonth1=%scan(%sysfunc(intnx(month,%sysfunc(today()),-1),worddat),1) ;

 

Frequent Contributor
Posts: 149

Re: creating a macro of month names

didn't work

Super User
Super User
Posts: 7,929

Re: creating a macro of month names


@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);

 

 

Frequent Contributor
Posts: 149

Re: creating a macro of month names


@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.);

 


 

☑ This topic is solved.

Need further help from the community? Please ask a new question.

Discussion stats
  • 5 replies
  • 123 views
  • 4 likes
  • 3 in conversation