2016-04-26 21 views
0

Ich habe Daten mit SSN und Open date und muss berechnen, ob ein Kunde 2 oder mehr Konten innerhalb von 120 Tagen basierend auf dem Feld open_date geöffnet hat. Ich weiß, INTCK/INTNX Funktionen zu verwenden, aber es erfordert 2 Datumsfelder, nicht sicher, wie die gleiche Logik auf ein einzelnes Feld für denselben Kunden anwenden. Bitte schlagen Sie vor.sas/sql Logic benötigt

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 

Antwort

1

können Sie exists oder join verwenden:

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

Danke Gordon, aber ich habe nur einen Tisch. Um die Logik zu verwenden, die Sie geteilt haben, muss es 2 Tabellen richtig haben? –

+0

@BharatGuda Nein, es wird ein Self-Join genannt - schließen Sie sich der Tabelle an. – Reeza

+0

okay, danke –

0

ich es JOIN mit tun würde:

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

Danke Dmitry, aber ich habe die Daten nur in 1 Tabelle, gibt es keine zweite Tabelle zu verbinden. –

+0

Es ist die gleiche Tabelle "haben" mit sich selbst verbunden –

+0

@ Dmitry Vielen Dank –

0

Nur eine etwas andere Lösung hier - nutzen Sie die dif-Funktion, die die berechnet Anzahl der Tage zwischen den offenen Konten.

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; 

Dann können Sie die Tabelle oben filtern nach Bedarf. Ich habe es an diesem Punkt auskommentiert, weil Sie nicht angegeben haben, wie Sie Ihre Ausgabetabelle haben möchten.

+0

Vielen Dank –