2014-05-14 101 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解決方案(刪除前一個,刪除下一​​個,刪除全部)。 –