所以,我想找到某一天前的第五個工作日,這意味着不包括週末和銀行假期。在一個正常的星期,它似乎工作正常,但如果我嘗試07APR2015的開始日期,這是復活節週五,週末和復活節星期一之後的星期二,它將返回錯誤的第五天。如何讓這個功能正常工作?這是在復活節週末給我錯誤的日子
TXT文件包含:
bhol
01jan2015
03apr2015
06apr2015
04may2015
25may2015
31aug2015
25dec2015
28dec2015
的代碼如下:
options mprint mlogic symbolgen;
proc import out=bhols datafile="C:\Users\me\Documents\bhols.txt" dbms=csv replace;
label;
run;
data bholdates;
set bhols;
sasdate=input(bhol,date9.);
today=input("07apr2015",date9.);
weekday=weekday(today);
call symputx("todayd",today,"g");
run;
proc sql ;
select sasdate into :bhols separated by " "
from bholdates;
quit;
%macro five;
data test;
/* format today day day5 date9.;*/
retain count;
count=0;
today=&todayd;
day=&todayd-1;
do until(count=1);
weekday=weekday(day);
if day in(&bhols) or weekday in(1,7) then do;
day=day-1;
end;
if day not in(&bhols) and weekday not in(1,7) then do;
count=count+1;
weekday5=weekday(day);
day5=day;
day=day-1;
end;
end;
run;
%mend;
%five;
我希望變量DAY5以包含指定日期前第五個工作日。
你會考慮創建自己的自定義時間間隔嗎?如果你有一個文件和SAS 9.3+的假期,這是一個不錯的選擇,那麼你可以使用intck/intnx函數。 – Reeza 2015-02-25 04:57:44