2016-07-26 6 views
0

テーブル1のクローズ日付とテーブル2の最も近い日付(存在する場合)とを組み合わせた2つのテーブルからデータをソートしようとしています。表1のID日付は表2に一致していない可能性があり、その逆もあります。 1対1のマッチも保証されていません。 IDに参加する組み合わせどこむしろ、すべてのユニークな日付の組み合わせであるとき、私はしたくない何日付の最小差異に基づくSAS作成のユニークな出会い

ID time2 
A 01/29/2015 
A 02/19/2015 
B 03/06/2015 
C 01/27/2015 
C 03/18/2015 
C 04/04/2015 

:同様

ID time1 
A 01/09/2015 
A 02/16/2015 
B 03/03/2015 
C 04/01/2015 
C 01/20/2015 
C 03/15/2015 

T2:インスタンスのためにt1から自分のデータは次のようなものになるだろうの間の日数は最小です。

desired_output:

ID date_time1 date_time2 
A 01/09/2015 01/29/2015 
A 02/16/2015 02/19/2015 
B 03/03/2015 03/06/2015 
C 01/20/2015 01/27/2015 
C 03/15/2015 03/18/2015 
C 04/01/2015 04/04/2015 

私はこれを行う方法がわからないです、私は最大と最小を選択しようとしたが、それが唯一の私が欲しいものではないようなものを与える:

ID date_time1 date_time2 
A 01/09/2015 02/19/2015 
B 03/03/2015 03/06/2015 
C 01/20/2015 04/04/2015 

これを行う方法についてのアイデアや提案は非常に高く評価されます!ありがとうございました!

答えて

1

例として2つの組み込みSASデータセットを使用しましたが、グループ内の各日付をt1で比較し、同一IDグループ内の各日付をt2にそれぞれ比較する場合は、それだけを守ってください。

data t1 (keep = id date rename = date = time1); 
    set sasuser.admitjune; 
    if mod(_n_, 2) = 0 then id = "A"; 
     else id = "B"; 
run; 

data t2 (keep = id date rename = date = time2); 
    set sasuser.admitjune; 
    if mod(_n_, 2) = 0 then id = "B"; 
     else id = "A"; 
    date = date + 3; /*adjusting the dates so the datasets aren't the same*/ 
run; 

これを行うには、あなたがソート日付の違いとnodupを昇順に保つための唯一の最も近い1:

proc sql; 
    create table desired_output as select 
     a.id, a.time1, b.time2 as nearest_time2, 
     abs(b.time2-a.time1) as diff 
     from t1 as a 
     left join t2 as b 
     on a.id = b.id and b.time2 > a.time1 
     group by a.id, a.time1 
     order by calculated diff; 
    proc sort nodupkey; by id time1; 
quit; 
+0

あなたは 'と> b.time2 a.time1'にしたい場合がありますあなたの'time2'イベントが' time1'イベントの後にあることを保証するために条件を結合します。 –

+0

私は何をしようとしていたのか不明だと思ったので、少し説明を変えました。私は2つのテーブルからのデータをソートしようとしています。テーブル1のクローズ日付とテーブル2の最も近い日付(存在する場合)をペアにします。しかし、それは良い追加です。クリスJ. – Brad

+0

これは近いですから、あなたは最も近い*次の日付を望んでいます(つまり、date2はdate1より遅くなければなりません)? – superfluous

関連する問題