2016-04-26 79 views
0

我有一個包含SSN和開放日期的數據,並且必須根據open_date字段計算客戶是否在120天內打開了2個或更多帳戶。我知道使用INTCK/INTNX函數,但它需要2個日期字段,不知道如何在同一個客戶的單個字段上應用相同的邏輯。請建議。需要sas/sql邏輯

SSN account   Open_date 
xyz 00/01/2015 
xyz 112344   11/22/2015 
xyz 893944   04/05/2016 
abc 992343   01/10/2016 
abc 999999   03/05/2016 
123 111123   07/16/2015 
123 445324   10/12/2015 

回答

1

您可以使用existsjoin

proc sql; 
    select distinct SSN 
    from t 
    where exists (select 1 
        from t t2 
        where t2.SSN = t.SSN and 
         t2.open_date between t.open_date and t.open_date + 120 
       ); 
+0

謝謝戈登,但我只有一張桌子。要使用你分享的邏輯,它必須有2個表格嗎? –

+0

@BharatGuda不,它被稱爲自連接 - 將表連接到自身。 – Reeza

+0

好的,謝謝 –

0

我會用JOIN做到這一點:

proc sql; 
    create table want as 
    select * 
    from have 
    where SSN in 
    (select a.SSN 
    from have a 
    inner join have b 
    on a.SSN=b.SSN 
    where intck('day', a.Open_date, b.Open_Date)+1 < 120) 
    ; 
quit; 
+0

謝謝德米特里,但是我只有1張表中的數據,沒有第二張表加入。 –

+0

這是同一張桌子'have'加入自己 –

+0

@德米特里謝謝 –

0

只是一個稍微不同的解決方案在這裏 - 使用的計算中的DIF功能賬戶之間的天數正在開放。

proc sort data=have; 
by ssn open_date; 
run; 

data want; 
set have; 
by ssn; 

days_between_open = dif(open_date); 

if first.ssn then days_between_open = .; 

*if 0 < days_between_open < 120 then output; 
run; 

然後你可以根據需要過濾上面的表格。由於您尚未指定您希望輸出表格的方式,因此我現在已將它留下評論。

+0

非常感謝你 –