EA 发帖数: 3965 | 1 我有两组数据,包括id 和 日期。他们都是一个id对应多个日期。我想把数据A当base,
left join 数据B,但是条件是,B的日期是在A的日期的前一年内。比如A日期是4/4/
2000,那如果B的日期在4/5/1999 - 4/4/2000,就保留。
A
id dt1
1 4/4/2000
1 4/7/2005
1 9/2/2002
2 3/1/2003
2 2/3/2006
3 5/5/2009
B
id dt2
1 5/1/1999
1 1/1/2007
2 9/8/2002
2 10/1/2002
2 1/2/2006
我希望得到C像这样。
id dt1 dt2
1 4/4/2000 5/1/1999
1 4/7/2005
1 9/2/2002
2 3/1/2003 9/8/2002
2 3/1/2003 10/1/2002
2 2/3/2006 1/2/2006
3 5/5/2009 |
j******o 发帖数: 127 | 2 why don't keep "10/1/2002" from data B? |
EA 发帖数: 3965 | 3 看漏了。请问有idea怎么做吗?
【在 j******o 的大作中提到】 : why don't keep "10/1/2002" from data B?
|
n*****1 发帖数: 172 | 4 use the intck function in the sql
base,
【在 EA 的大作中提到】 : 我有两组数据,包括id 和 日期。他们都是一个id对应多个日期。我想把数据A当base, : left join 数据B,但是条件是,B的日期是在A的日期的前一年内。比如A日期是4/4/ : 2000,那如果B的日期在4/5/1999 - 4/4/2000,就保留。 : A : id dt1 : 1 4/4/2000 : 1 4/7/2005 : 1 9/2/2002 : 2 3/1/2003 : 2 2/3/2006
|
j******o 发帖数: 127 | 5 Try this.
data one;
input id dt1 : mmddyy10.;
format dt1 mmddyy10.;
datalines;
1 4/4/2000
1 4/7/2005
1 9/2/2002
2 3/1/2003
2 2/3/2006
3 5/5/2009
;
run;
data two;
input id dt2 : mmddyy10.;
format dt2 mmddyy10.;
datalines;
1 5/1/1999
1 1/1/2007
2 9/8/2002
2 10/1/2002
2 1/2/2006
;
run;
proc sql;
create table obtain as
select a.id, coalesce(a.dt1, b.dt1) as dt1 format mmddyy10., b.dt2
from one a left join
(
select one.*, two.dt2
from one, two
where one.id=two.id and 0<= one.dt1-two.dt2 <=360
) b
on a.id=b.id and a.dt1=b.dt1;
quit;
【在 EA 的大作中提到】 : 看漏了。请问有idea怎么做吗?
|
h*********1 发帖数: 102 | 6 data A;
input id dt1: mmddyy10.;
format dt1 mmddyy10.;
datalines;
1 4/4/2000
1 4/7/2005
1 9/2/2002
2 3/1/2003
2 2/3/2006
3 5/5/2009;
run;
data B;
input id dt2: mmddyy10.;
format dt2 mmddyy10.;
datalines;
1 5/1/1999
1 1/1/2007
2 9/8/2002
2 10/1/2002
2 1/2/2006;
run;
proc sql;
create table C as
select A.*, B.dt2
from A
left join B
on A.id=B.id and
(A.dt1 ge B.dt2 ge mdy(month(A.dt1),day(A.dt1),year(A.dt1)-1));
quit; |
EA 发帖数: 3965 | |