SAS:先使用。最后。处理日期范围

时间:2016-03-11 13:09:33

标签: sas

我正在尝试查看日期列表,并仅保留5次或更多次出现日期的日期范围,并删除所有其他日期。我的例子是:

data test;
     input dt dt2;
     format dt dt2 date9.;
     datalines;
     20000 20001
     20000 20002
     20000 20003
     21000 21001
     21000 21002
     21000 21003
     21000 21004
     21000 21005
     ;
run;

proc sort data = test;
     by dt dt2;
run;

data check;
    set test;
    by dt dt2;
    format dt dt2 date9.;
    if last.dt = first.dt then
        if abs(last.dt2 - first.dt) < 5 then delete;
run;

如果可能的话,我想要归还的只是一个条目,但我也会对整个适当的范围感到满意。 一个条目是一个包含以下内容的表:

 start_dt end_dt
 21000    21005

适当的范围是:

     21000 21001
     21000 21002
     21000 21003
     21000 21004
     21000 21005

我的代码无法按预期运行,我不确定需要做出哪些更改。

2 个答案:

答案 0 :(得分:4)

last.dt2first.dt是标志,可以在(0,1)中有值,因此条件abs(last.dt2 - first.dt) < 5始终为true。 使用计数器变量来计算组中的记录:

data check(drop= count);
    length count 8;
    count=0;
    do until(last.dt);
        set test;
        by dt dt2;
        format dt dt2 date9.;
        count = count+1;
        if last.dt and count>=5 then output;
    end;
run;

答案 1 :(得分:0)

我不确定你为什么要在你的删除功能中使用last.dt2和first.dt,所以我把它转过来创建你想要的输出:

data check2;
set test;
    by dt ;
    format dt dt2 date9.;
    if last.dt then do;
        if abs(dt2 - dt) >= 5 then output;
    end;
run;

当然,只有在dt和dt2上对文件进行排序时,这才有效。

希望这有帮助。