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

In a data set, each observation has a datetime variable "Trade_date_time", all before 22nd sept 2011.

I want to create a new variable called "time_left", which holds the number of days from each observation untill the 22nd sept 2011.

my code so far...

data my_data;

  set my_data;

   date=datepart(Trade_date_time);

  exp_date= '22-SEP-2011'd;

  time_left = exp_date-date;

run;

but of course this is not correct, as it includes weekend days as well,

how can I not include weekend days in my time_left variable.

EDIT: Ok, so now I am using

data my_data;

  set my_data;

   date=datepart(Trade_date_time);

  exp_date= '22-SEP-2011'd;

  weeks_left= week(exp_date)-week(date);

  time_left = exp_date-date;

  time_left_adj = exp_date-date-(2*weeks_left);

run;

which I think works.

1 ACCEPTED SOLUTION

Accepted Solutions
Haikuo
Onyx | Level 15

INTCK will take care it automatically:

data my_data;

  set my_data;

   date=datepart(Trade_date_time);

  exp_date= '22-SEP-2011'd;

/*  weeks_left= week(exp_date)-week(date);*/

/*  time_left = exp_date-date;*/

  time_left_adj = intck('weekday',date,exp_date);

run;

Regards,

Haikuo

View solution in original post

3 REPLIES 3
Reeza
Super User

What about holidays?

You could do something like the following to double check but someone might have a more sleek answer using a custom interval and intck.

The following may also need to be adjusted by 1 depending on if you're including the boundary dates or not.

data my_data;

  set my_data;

   date=datepart(Trade_date_time);

  exp_date= '22-SEP-2011'd;

  weeks_left= week(exp_date)-week(date);

  time_left = exp_date-date;

  time_left_adj = exp_date-date-(2*weeks_left);

time_left_check=0;

do i=date to exp_date;

     if weekday(i) not in (1, 7) then time_left_check+1;

end;

run;

Howles
Quartz | Level 8

See http://www.sascommunity.org/wiki/Generating_Holiday_Lists

Reeza wrote:

What about holidays?

You could do something like the following to double check but someone might have a more sleek answer using a custom interval and intck.

The following may also need to be adjusted by 1 depending on if you're including the boundary dates or not.

data my_data;

  set my_data;

   date=datepart(Trade_date_time);

  exp_date= '22-SEP-2011'd;

  weeks_left= week(exp_date)-week(date);

  time_left = exp_date-date;

  time_left_adj = exp_date-date-(2*weeks_left);

time_left_check=0;

do i=date to exp_date;

     if weekday(i) not in (1, 7) then time_left_check+1;

end;

run;

Haikuo
Onyx | Level 15

INTCK will take care it automatically:

data my_data;

  set my_data;

   date=datepart(Trade_date_time);

  exp_date= '22-SEP-2011'd;

/*  weeks_left= week(exp_date)-week(date);*/

/*  time_left = exp_date-date;*/

  time_left_adj = intck('weekday',date,exp_date);

run;

Regards,

Haikuo

Catch up on SAS Innovate 2026

Nearly 200 sessions are now available on demand with the SAS Innovate Digital Pass.

Explore Now →
What is Bayesian Analysis?

Learn the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.

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