0

我有以下数据...

acct    seq    start            end
1111     A     01/01/2014       01/31/2014
1111     A     02/01/2014       02/28/2014

我需要排除帐户的开始日期是结束日期后 1 天的记录。因此,上述记录将被排除,因为它在第一次观察时的结束日期为 01/31/2014,而在以下观察时的开始日期为 02/01/2014。

我认为我需要使用 Retain 来完成此操作,但我不太确定如何编写它。任何帮助,将不胜感激...

4

2 回答 2

1

Proc SQL 解决方案...假设您使用的是 SAS 日期...

proc sql;
    create table excludes as
    select distinct acct
    from data as one
    left join data as two
    on one.acct=two.acct and one.end=two.start-1
    where two.start is not null;

    create table filtered as
    select *
    from data
    where acct not in
    (
        select *
        from excludes
    );
quit;
于 2014-05-14T13:20:07.953 回答
0

Datastep 解决方案,假设您的数据按acctand分组seq(并且您的日期是 SAS 日期)

数据要;
  设置有;
  通过 acct seq ;

  保留 prevdt 。;

  prevdt = 结束;

  如果 first.seq 则输出;
  否则做;
    如果 start > sum(prevdt,1) 则输出;
    prevdt = 结束;
  结尾 ;

  删除 prevdt ;
跑 ;
于 2014-05-14T15:07:23.520 回答