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.

sas-innovate-2024.png

Available on demand!

Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.

 

Register now!

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.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

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