BookmarkSubscribeRSS Feed
Q1983
Lapis Lazuli | Level 10

data appeals1;

set appeals;

age_585=intck('day',lm_set_up_dt,_585);

run;

In this code I am getting the number of days between lm_set_up_dt and _585(which is a date)

I believe the ‘day’ function does not consider holidays and weekends it just provides a straight day difference.

Is there a way to have ‘day’ account for this by assigning the closest business day.(ie if one of the dates falls on Sunday can ‘day’ increment to Monday

(ie if _585 falls on Sunday 9/21/14 the code would allow _585 to increment to Monday 9/22/14 for calculation purposes.  In our company we do have a previous business day variable called &pbday.  I may need to learn how ‘day’ is read by sas

3 REPLIES 3
Reeza
Super User

Look into 'weekday' instead of 'day', but it depends on your question.

Otherwise you can test if _585 is a day on Sat/Sun and increment. If you want to account for holidays it's more complicated.

data appeals1;

set appeals;

if day(_585)=7 then date=_585+2;/*Saturday*/

if day(_585)=1 then date=_585+1;/*Sunday*/

age_585=intck('day',lm_set_up_dt,date);

age_585_v2=intck('weekday', lm_set_up_dt, date);

run;

Patrick
Opal | Level 21

intck() will return the difference between to dates based on the interval you're using. With "day" it is the number of days between 2 dates.

There are other intervals. "weekday" is eventually what you're after: SAS(R) 9.4 Functions and CALL Routines: Reference, Third Edition

Weekday will give you the number of - as it says - week days between 2 dates (with Saturday and Sunday treated as week-end).

I'm not sure that I fully understand what you're after so won't try to take this further. Run below code and let us know if this gives you what you're after.

Holidays are regional so there is no general interval out of the box available (except for US wide valid holiday days). You can create your own custom interval to take regional holidays into account. It's all documented under the link I've posted.

data test;

  format day_of_week downame.;

  format lm_set_up_dt _585 date9.;

  lm_set_up_dt='01Sep2014'd;

  do _585='18Sep2014'd, '19Sep2014'd, '20Sep2014'd, '21Sep2014'd, '22Sep2014'd, '23Sep2014'd;

    day_of_week=_585;

    diff_day=intck('day',lm_set_up_dt,_585);

    diff_weekday=intck('weekday',lm_set_up_dt,_585);

    output;

  end;

run;

jakarman
Barite | Level 11

In the documentation link by Patrick also the intervalds option with custom intervals is mentioned.

You can define and use any interval definition as you like including own defined holidays business working days or business service hours. 

---->-- ja karman --<-----

sas-innovate-2024.png

Don't miss out on SAS Innovate - Register now for the FREE Livestream!

Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.

 

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
  • 3 replies
  • 759 views
  • 0 likes
  • 4 in conversation