BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
RikeshPunja
Fluorite | Level 6

I want to be able to find the number of months between 2 dates.

 

The first date will always be 30 June 2014. My end date will always be the last day of the previous month. I want to then be able to use that number in other parts of code. 

 

I.E. Between 30th June 2014 and 31st August 2020 there are 74 months. I want to then be able to call on that 74 in a later For loop.

 

I have tried something like this from using another code but I can't get it to work.

data _null_;
	call symput('month_end', put(intnx('month',today(),0)-1,date9.));
	call symput('start_date', put(intnx('month','30Jun14'd,0),date9.));
RUN;

%put &month_end.;
%put &Start_date.;

data a;
NumberOfMonths = INTCK('MONTH', '30Jun14'd, &month_end., 'D');
RUN;
1 ACCEPTED SOLUTION

Accepted Solutions
PaigeMiller
Diamond | Level 26

First, you don't need macro variables to do this.

 

data a;
NumberOfMonths = INTCK('MONTH', '30Jun2014'd, intnx('month',today(),0,'e'), 'D');
RUN;

 

Also, if you are going to create macro variables, DO NOT format them. (Maxim 28)

 

data _null_;
	call symputx('month_end',intnx('month',today(),0)-1);
	call symputx('start_date','30Jun2014'd);
RUN;

data a;
NumberOfMonths = INTCK('MONTH', &start_date, &month_end, 'D');
RUN;

But as I said, in this simple example, macro variables are not needed, nevertheless the advice to NOT format macro variables is a general rule you should follow, with the exception of when the macro variables are going to be used in titles or labels.


Lastly, this part of your code 

intnx('month',today(),0)-1

calculates the day one day previous to today (but yet you call in MONTH_END), is that what you want?

 

 

--
Paige Miller

View solution in original post

4 REPLIES 4
PaigeMiller
Diamond | Level 26

First, you don't need macro variables to do this.

 

data a;
NumberOfMonths = INTCK('MONTH', '30Jun2014'd, intnx('month',today(),0,'e'), 'D');
RUN;

 

Also, if you are going to create macro variables, DO NOT format them. (Maxim 28)

 

data _null_;
	call symputx('month_end',intnx('month',today(),0)-1);
	call symputx('start_date','30Jun2014'd);
RUN;

data a;
NumberOfMonths = INTCK('MONTH', &start_date, &month_end, 'D');
RUN;

But as I said, in this simple example, macro variables are not needed, nevertheless the advice to NOT format macro variables is a general rule you should follow, with the exception of when the macro variables are going to be used in titles or labels.


Lastly, this part of your code 

intnx('month',today(),0)-1

calculates the day one day previous to today (but yet you call in MONTH_END), is that what you want?

 

 

--
Paige Miller
RikeshPunja
Fluorite | Level 6

Thank you so much for this.

I've been put on a project in SAS which is quite intermediate but I am a novice but learning as I'm going along. 

There was some older code written by someone before me that included macro variables so thought I would adapt that.

Also, I didn't mean to calculate 1 day before today, that was my error. I was trying to get the last day of the previous month.

 

I have a follow-up question, if I use NumberOfMonths, in a For loop, will it work?

What I am actually trying to get is a list, which has the last day of every month from 30th June 2014 to the last day of the previous month.

Could you help me with that?

 

PaigeMiller
Diamond | Level 26

What I am actually trying to get is a list, which has the last day of every month from 30th June 2014 to the last day of the previous month. Could you help me with that?

data want;
	date='30jun2014'd;
	enddate=today();
	do while (date<enddate);
	    output;
		date=intnx('month',date,1,'e');
	end;
	keep date;
	format date yymmdd10.;
run;
		

 

 

 

--
Paige Miller
RikeshPunja
Fluorite | Level 6
Thank you for this.

I'll try to understand how it works.
How to Concatenate Values

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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 4 replies
  • 1756 views
  • 2 likes
  • 2 in conversation