## Re:Macro dates

Solved
Frequent Contributor
Posts: 82

# Re:Macro dates

Hi all,

%Let mon - Dec2011 ;

I want to use the above macro variable in a data step and create a month end  date variable in date9. format (like 31DEC2011) . Is there a easy way to do it?

Data a;

date9 = 31dec2011(this is what i want to see in column date9.)

Run;

Accepted Solutions
Solution
‎03-11-2012 10:17 AM
Super User
Posts: 8,120

## Re:Macro dates

First learn about date literals to make it easier to use the macro variable.  You could write "01&mon"d to represent the first of the month.

Then learn about the INTNX function for how to convert a date.  You want to use MONTH interval and find the END of the interval.

`%let mon=Dec2011;data a;  date9 = intnx('month',"01&mon"d,0,'end');  format date9 date9.;  put "mon=&mon " date9= ;run;mon=Dec2011 date9=31DEC2011`

You can also do this in macro logic if you need it.

`%let d=dec2011;%let e=%sysfunc(intnx(month,"01&d"d,0,e),date9.);%put e=&e;e=31DEC2011%let d=feb2012;%let e=%sysfunc(intnx(month,"01&d"d,0,e),date9.);%put e=&e;e=29FEB2012`

All Replies
Solution
‎03-11-2012 10:17 AM
Super User
Posts: 8,120

## Re:Macro dates

First learn about date literals to make it easier to use the macro variable.  You could write "01&mon"d to represent the first of the month.

Then learn about the INTNX function for how to convert a date.  You want to use MONTH interval and find the END of the interval.

`%let mon=Dec2011;data a;  date9 = intnx('month',"01&mon"d,0,'end');  format date9 date9.;  put "mon=&mon " date9= ;run;mon=Dec2011 date9=31DEC2011`

You can also do this in macro logic if you need it.

`%let d=dec2011;%let e=%sysfunc(intnx(month,"01&d"d,0,e),date9.);%put e=&e;e=31DEC2011%let d=feb2012;%let e=%sysfunc(intnx(month,"01&d"d,0,e),date9.);%put e=&e;e=29FEB2012`
Frequent Contributor
Posts: 82

## Re:Macro dates

Thanks!!

🔒 This topic is solved and locked.