2014-05-14 55 views
0

我有以下数据...SAS - 使用保留的数据步骤?

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来完成这个任务,但我不太清楚如何编写它。任何帮助,将不胜感激......

+0

是否要排除acct = 1111的所有记录,或者只是开始日期和结束日期相距1天的单个记录? – Zfunk

回答

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; 
0

Datastep解决方案,假设你的数据是由acctseq(和你的日期分组是SAS日期)

 
data want ; 
    set have ; 
    by acct seq ; 

    retain prevdt . ; 

    prevdt = end ; 

    if first.seq then output ; 
    else do ; 
    if start > sum(prevdt,1) then output ; 
    prevdt = end ; 
    end ; 

    drop prevdt ; 
run ; 
+0

我不认为这会完成OP的目标。这听起来像是当账户在结束日期一天后有一个开始日期时,他想放弃一个账户的所有记录。至少,这是我的解释:“我需要排除帐户开始日期为结束日期1天后的记录......” –

+0

授予,OP需要更清楚地陈述哪些记录需要保留/删除。可以为所有3个场景提供一个datastep解决方案(删除前一个,删除下一​​个,删除全部)。 –