2016-04-26 11 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

ありがとうございましたGordon、しかし私は1つのテーブルしか持っていません。共有するロジックを使用するには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つのテーブルにのみデータがあり、2番目のテーブルには参加しません。 –

+0

それは同じテーブル 'それは自分自身に参加している –

+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

ありがとう –

関連する問題