If you work in SAS with Date or DateTime variables, sooner or later, you will need the INTCK function. With the INTCK function, you can calculate the difference between two dates in days, months, year, etc. In this article, we discuss the syntax of the SAS INTCK function and provide many examples of real-world problems.
If you want to know how to add days, weeks, months, etc. to an existing date variable, then you need the INTNX function.
Contents
The SAS INTCK Function: Syntax
INTCK(interval, start-date, end-date, <method>)
The INTCK function has three obligatory arguments and one options argument:
- interval: a character constant, variable, or expression (in lower or uppercase) that specifies your interval, e.g. “day” or “month”. This page lists all possible intervals.
- start-date: a Date or DateTime expression.
- end-date: a Date or DateTime expression.
- method (optional): specifies that intervals are counted using either a discrete or a continuous method. The default method is Discrete.
The SAS INTCK Function: Examples
In this section, we give examples of the most common uses of the SAS INTCK function. In all examples, the start-date and the end-date arguments are Date variable. However, if the arguments aren’t of the same type, you need to convert one of them. In other articles on this website, we explain how to convert a Date variable into a DateTime variable and vice versa.
Difference Between Two Dates in DAYS
You can use the SAS INTCK function to calculate the difference between two dates in days setting the interval argument equal to “day”. If you work with DateTime variables, then you use “dtday” instead of “day”. In this example, we determine the number of days between the 1st of July 2020 and the 3rd of July 2020.
/* DIFFERENCE IN DAYS */ DATA _NULL_; DIFF_DAYS = INTCK("DAY", "1JUL2020"D, "3JUL2020"D); PUT "DIFFERENCE IN DAYS: " DIFF_DAYS; RUN;
DIFFERENCE IN DAYS: 2
Difference Between Two Dates in WEEKS
You can use the argument “WEEK” in the INTCK function to obtain the number of weeks between two dates. The code below shows how you can calculate the number of weeks between the 1st of July and the 13th of July. As you can see in the image above the difference is two weeks (week 27 vs. week 29).
/* DIFFERENCE IN WEEKS */ DATA _NULL_; DIFF_WEEKS = INTCK("WEEK", "1JUL2020"D, "13JUL2020"D); PUT "DIFFERENCE IN WEEKS: " DIFF_WEEKS; RUN;
DIFFERENCE IN WEEKS: 2
However, if you want SAS to return the number of whole weeks between two dates, then you need to change the optional method argument. By default, the method that SAS uses to count the difference between days, weeks, months, etc. is discrete. However, if you want SAS to return the number of whole weeks between the 1st of July and the 13th of July, you need to set the method argument to “continuous”.
/* DIFFERENCE IN WEEKS (CONTINUOUS) */ DATA _NULL_; DIFF_WEEKS_CONT = INTCK("WEEK", "1JUL2020"D, "13JUL2020"D, "CONTINUOUS"); PUT "DIFFERENCE IN WHOLE WEEKS: " DIFF_WEEKS_CONT; RUN;
DIFFERENCE IN WHOLE WEEKS: 1
For more information about the method argument, go to a later section of the article.
Difference Between Two Dates in MONTHS
As in the previous examples, you need to change the interval argument. To count the number of months between two dates you need to set the argument to “month”. If you use DateTime variables, you use “dtmonth”.
/* DIFFERENCE IN MONTHS */ DATA _NULL_; DIFF_MONTHS = INTCK("MONTH", "1JUL2020"D, "24AUG2020"D); PUT "DIFFERENCE IN MONTHS: " DIFF_MONTHS; RUN;
DIFFERENCE IN MONTHS: 1
Difference Between Two Dates in QUARTERS
You can also use the INTCK function to count the number of quarters between two dates. We can calculate the difference between the 1st of July 2020 (Q3) and the 1st of December 2020 (Q4) with the code below. You need to set the interval parameter to “qtr” or “dtqtr” if you work with DateTime variables.
/* DIFFERENCE IN QUARTERS */ DATA _NULL_; DIFF_QUARTERS = INTCK("QTR", "1JUL2020"D, "1DEC2020"D); PUT "DIFFERENCE IN QUARTERS: " DIFF_QUARTERS; RUN;
DIFFERENCE IN QUARTERS: 1
Difference Between Two Dates in YEAR
You can use the SAS INTCK function also to calculate the number of years between two dates. If you work with Date variables you set the interval to “year”. In case your variables are Datetime, then you need to set this parameter to “dtyear”. The example below shows the code on how to calculate the difference in years between the 1st of July 2019 and the 1st of July 2020.
/* DIFFERENCE IN YEARS */ DATA _NULL_; DIFF_YEARS = INTCK("YEAR", "1JUL2019"D, "1JUL2020"D); PUT "DIFFERENCE IN YEARS: " DIFF_YEARS; RUN;
DIFFERENCE IN YEARS: 1
Do you know? How to Convert a Number into a SAS Date
INTCK: Special Intervals
Besides the well-known interval arguments mentioned above (day, week, month, etc.), You can use the INTCK function also for less-known purposes. For example, to calculate the number of business days or the number of Tuesdays between two dates. Below we show some examples of how to use the SAS INTCK function in cases.
Difference Between Two Dates in BUSINESS DAYS
For example, the number of business days (weekdays) between the 1st of July 2020 (Wednesday) and the 7th of July 2020 (Thursday) is four. SAS assumes a workweek starts on Monday and ends on Friday. The code snippet below demonstrates how to count the difference in business days setting the interval argument to “weekday”.
/* DIFFERENCE IN BUSINESS DAYS */ DATA _NULL_; DIFF_BUSINESSDAYS = INTCK("WEEKDAY", "1JUL2020"D, "7JUL2020"D); PUT "DIFFERENCE IN BUSINESS DAYS: " DIFF_BUSINESSDAYS; RUN;
DIFFERENCE IN BUSINESS DAYS: 4
As mentioned before, SAS assumes that a working week has 5 days and that Saturday and Sunday are weekends. However, if you need a working week of 6 days where only Sunday is weekend, you can set the interval argument to “weekday1w”.
In the SAS programming language, the first day of the week is Sunday, Monday is the second day, and so on. With the “weekday1w” you specify that day 1 of the week is a weekend. Using this syntax, you can create your definition of a business week. For example, “weekday123w” means that Sunday (day 1), Monday (day 2) and Tuesday (day 3) are weekends and that the rest of the week are business days.
/* DIFFERENCE IN CUSTOM BUSINESS DAYS */ DATA _NULL_; DIFF_BUSINESSDAYS = INTCK("WEEKDAY123W", "1JUL2020"D, "7JUL2020"D); PUT "DIFFERENCE IN CUSTOM BUSINESS DAYS: " DIFF_BUSINESSDAYS; RUN;
DIFFERENCE IN CUSTOM BUSINESS DAYS: 3
Difference Between Two Dates in MONDAYS / TUESDAYS / ETC.
In a previous example, we showed how to determine the number of weeks between the 1st of July 2020 and the 13th of July 2020. SAS returned 2 as the difference. However, suppose you don’t want to count the number of weeks. Instead, you want to know how many Tuesdays there are between these two dates. You can do this by setting the interval parameter to “week.3”. Remember that in the SAS language, Tuesday is the third day of the week.
/* DIFFERENCE IN TUESDAYS */ DATA _NULL_; DIFF_TUESDAYS = INTCK("WEEK.3", "1JUL2020"D, "13JUL2020"D); PUT "DIFFERENCE IN TUESDAYS: " DIFF_TUESDAYS; RUN;
DIFFERENCE IN TUESDAYS: 1
As you can verify with the calendar above, SAS calculated the number of Tuesdays between the 1st of July 2020 and the 13th of July 2020 correctly.
Calculating the number of, for example, Tuesdays between two dates is equivalent to calculating the difference in weeks between two dates where the week starts on Tuesday. We will show this in the example below.
As mentioned before, weeks start on Sunday in SAS. However, in a lot of regions and/or for business purposes it’s normal to assume that weeks start on Monday. If you calculate the difference in weeks between two dates, you can let SAS know on which day the week starts. In the example below, we show the difference in results if we assume that the week starts either on Sunday or on Monday.
/* DIFFERENCE IN WEEKS (WEEK STARTS ON SUNDAY)*/ DATA _NULL_; DIFF_WEEKS = INTCK("WEEK", "5JUL2020"D, "7JUL2020"D); PUT "DIFFERENCE IN WEEKS (WEEK STARTS ON SUNDAY): " DIFF_WEEKS; RUN; /* DIFFERENCE IN WEEKS (WEEK STARTS ON MONDAY)*/ DATA _NULL_; DIFF_WEEKS = INTCK("WEEK.2", "5JUL2020"D, "7JUL2020"D); PUT "DIFFERENCE IN WEEKS (WEEK STARTS ON MONDAY): " DIFF_WEEKS; RUN;
DIFFERENCE IN WEEKS (WEEK STARTS ON SUNDAY): 0
DIFFERENCE IN WEEKS (WEEK STARTS ON MONDAY): 1
INTCK: The Method Argument
As mentioned in the syntax section of this article, the INTCK function has one optional argument, namely, the method argument. By default, this argument is set to “discrete” or “d” which means that SAS counts the number of days, week, months, etc. between two dates. However, if you set this argument to “continuous” or “c”, then SAS counts the number of complete days, weeks, months, etc. between two days. We show the difference with the example code below.
/* THE METHOD ARGUMENT */ DATA WORK.METHOD_ARGUMENT; START = '1JUL2020'D; END = '5JUL2020'D; DIFF_WEEKS_DEFAULT = INTCK("WEEK", START, END); DIFF_WEEKS_DISCRETE = INTCK("WEEK", START, END, "D"); DIFF_WEEKS_CONTINUOUS = INTCK("WEEK", START, END, "C"); OUTPUT; END = '9JUL2020'D; DIFF_WEEKS_DEFAULT = INTCK("WEEK", START, END); DIFF_WEEKS_DISCRETE = INTCK("WEEK", START, END, "D"); DIFF_WEEKS_CONTINUOUS = INTCK("WEEK", START, END, "C"); OUTPUT; END = '14JUL2020'D; DIFF_WEEKS_DEFAULT = INTCK("WEEK", START, END); DIFF_WEEKS_DISCRETE = INTCK("WEEK", START, END, "D"); DIFF_WEEKS_CONTINUOUS = INTCK("WEEK", START, END, "C"); OUTPUT; FORMAT START END DATE9.; RUN;
INTCK & Macro Functions
If you write more complex code, you probably create macro variables and/or macro functions. To use the INTCK function, you need the %synfunc-function. Also, you need to write the interval and method arguments without quotes. See the examples below on how to use the SAS INTCK function in a macro.
/* INTCK FUNCTION IN MACROS */ %MACRO DIFFERENCE_MACRO(START_DATE, END_DATE); DATA WORK.DS_DIFF_MACRO; START="&START_DATE."D; END="&END_DATE."D; %IF %SYSFUNC(INTCK(DAY, "&START_DATE."D, "&END_DATE."D, D)) > 1 %THEN %DO; DIFF_GR_1_DAY = "YES"; %END; %ELSE %DO; DIFF_GR_1_DAY = "NO"; %END; %IF %SYSFUNC(INTCK(MONTH, "&START_DATE."D, "&END_DATE."D, D)) > 1 %THEN %DO; DIFF_GR_1_MONTH = "YES"; %END; %ELSE %DO; DIFF_GR_1_MONTH = "NO"; %END; %IF %SYSFUNC(INTCK(YEAR, "&START_DATE."D, "&END_DATE."D, D)) > 1 %THEN %DO; DIFF_GR_1_YEAR = "YES"; %END; %ELSE %DO; DIFF_GR_1_YEAR = "NO"; %END; FORMAT START END DATE9.; LABEL DIFF_GR_1_DAY = "Difference > 1 day" DIFF_GR_1_MONTH = "Difference > 1 month" DIFF_GR_1_YEAR = "Difference > 1 year"; RUN; %MEND; %DIFFERENCE_MACRO(START_DATE=1JUL2020, END_DATE=30SEP2020); PROC PRINT DATA=WORK.DS_DIFF_MACRO LABEL; RUN;
3 thoughts on “Complete Guide for SAS INTCK Function – Many Examples”
Comments are closed.