我随手敲的几个日子,比如其中20050202和20050203是周末不包括在内,我要求的就是interval这个变量,请问要如何简单的得到?谢谢!作者: shiyiming 时间: 2011-6-16 12:47 标题: Re: 如何计算两个日期之间的business day? use format to calculate the bussiness day.
when a speicfied date is not saturday or sunday , label plus one.otherwise no change.
u can specify a from date like 1800-01-01 as day 1.
data format;
retain fmtname 'bndt';
do date='01jan1800'd to '31dec2099'd;
start=date;
end=date;
if weekday(date) not in (7,1) then label+1;
output;
end;
run;
proc format cntlin=format;
run;
data _null_;
input frmdate : $8. todate : $8.;
interval=put(input(todate,yymmdd8.),bndt.)-put(input(frmdate,yymmdd8.),bndt.);
put interval=;
cards;
20050201 20050130
20050201 20050131
20050201 20050201
20050201 20050204
20050201 20050205
;
run;作者: shiyiming 时间: 2011-6-16 13:54 标题: Re: 如何计算两个日期之间的business day? 赞,原来format这么好用,不过这里只排除了周六和周日,没有排除public holiday啊。
data format_wrk_dte;
length start $ 8;
label start="日期";
length end $ 8;
label end="日期";
length flag $ 1;
label flag="是否工作日";
do i='01jan2000'd to '31dec2500'd;
start=put(i,yymmddn8.);
end=put(i,yymmddn8.);
fmtname="$wrkdte";
eff_from='18000101';
eff_to='99991231';
w=weekday(i);
if w in (2,3,4,5,6) then do;
flag='1';
end;
else flag='0';
output;
end;
drop i w;
run;
/*导入特殊日期,里面包含日期和标识信息,打个比方:如果这个日期本来是星期一,但是不用上班,则标识信息为0,表示不用累加;
如果是周末,但是需要上班,则标识信息为1,表示要累加。不知我说的清楚不。*/
data para_spe;
length start $ 8;
label start="开始日期";
length end $ 8;
label end="结束日期";
length flag $ 1;
label flag="修改标志";
infile spe missover;
input start : $8. flag : $1. ;
end=start;
run;
proc sort data=para_spe;
by start;
run;
data format_wrk_dte;
merge format_wrk_dte(in=in1)
para_spe(in=in2);
length label 8;
label label="标记";
retain label 0;
by start;
if in1 then do;
label+flag;
output;
end;
run;