Solved
Contributor
Posts: 22

# use of INTNX

data wt;
datenew=intnx('qtr','01jan94'd,1,'middle');
format datenew mmddyy10.;
run;

its output is coming as 05/16/1994 but qarter consists of 3 months so it should be 04/16/1994.

Accepted Solutions
Solution
‎04-10-2017 02:00 PM
Super User
Posts: 10,238

## Re: use of INTNX

s_m wrote:

data wt;
datenew=intnx('qtr','01jan94'd,1,'middle');
format datenew mmddyy10.;
run;

its output is coming as 05/16/1994 but qarter consists of 3 months so it should be 04/16/1994.

Why? The middle of the second quarter (months 4, 5 and 6) is the middle of month 5.

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
How to convert datasets to data steps
How to post code

All Replies
Solution
‎04-10-2017 02:00 PM
Super User
Posts: 10,238

## Re: use of INTNX

s_m wrote:

data wt;
datenew=intnx('qtr','01jan94'd,1,'middle');
format datenew mmddyy10.;
run;

its output is coming as 05/16/1994 but qarter consists of 3 months so it should be 04/16/1994.

Why? The middle of the second quarter (months 4, 5 and 6) is the middle of month 5.

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
How to convert datasets to data steps
How to post code
Super User
Posts: 23,703

## Re: use of INTNX

If you want 3 months from the date use MONTH and 3 instead of QTR. Also note that April has 30 days so it would be the 15th NOT the 16th.  See the code and output below.

60 data wt;
61 date1=intnx('qtr','01jan94'd,1,'m');
62 date2=intnx('MONTH','01jan94'd,3,'m');
63 format date: mmddyy10.;
64
65 put "QTR = " date1;
66 put "Month = " date2;
67 run;

QTR = 05/16/1994
Month = 04/15/1994
NOTE: The data set WORK.WT has 1 observations and 2 variables.
NOTE: DATA statement used (Total process time):
real time 0.00 seconds
cpu time 0.01 seconds

Super User
Posts: 8,093

## Re: use of INTNX

You need to tell it that is what you want.

``````data test1;
date = '01JAN1994'd ;
next_qtr = intnx('qtr','01jan94'd,1,'middle');
first_month_of_next_qtr = intnx('month',intnx('qtr','01jan94'd,1,'s'),0,'middle');
format _all_ yymmdd10.;
put (_all_) (=/);
run;``````

date=1994-01-01
next_qtr=1994-05-16
first_month_of_next_qtr=1994-04-15

☑ This topic is solved.