根据日期范围加入两个数据集
Joining two dataset based on date range
- 我有两个数据集,必须根据两个条件加入它们。
- 如果主键 (ID) 匹配 .
- 如果第二个数据集的日期在数据集第一个日期的 +-5 天内。
知道怎么做吗?
您也可以在 JOIN
子句上使用 <=
和 >=
运算符。您的查询可能如下所示:
SELECT *
FROM table_a as a
INNER JOIN table_b as b
ON a.id=b.id
AND b.date >= a.date-5
AND b.date <= a.date+5
使用 BETWEEN
运算符。
proc sql;
create table want as
select *
from have1 t1 inner join have2 t2
on t1.id = t2.id
and t2.date BETWEEN t1.date-5 AND t1.date+5
;
quit;
示例数据:
data have1;
infile datalines4 delimiter="|";
input id date :date9.;
format date date9.;
datalines4;
1|15DEC2021
2|12NOV2020
3|10JAN2019
;;;;
data have2;
infile datalines4 delimiter="|";
input id date :date9.;
format date date9.;
datalines4;
1|20DEC2021
2|16NOV2020
3|19JAN2019
;;;;
proc sql;
create table want as
select t1.id
from have1 t1 inner join have2 t2
on t1.id = t2.id
and t2.date BETWEEN t1.date-5 AND t1.date+5
;
quit;
Result:
id
1
2
- 我有两个数据集,必须根据两个条件加入它们。
- 如果主键 (ID) 匹配 .
- 如果第二个数据集的日期在数据集第一个日期的 +-5 天内。
知道怎么做吗?
您也可以在 JOIN
子句上使用 <=
和 >=
运算符。您的查询可能如下所示:
SELECT *
FROM table_a as a
INNER JOIN table_b as b
ON a.id=b.id
AND b.date >= a.date-5
AND b.date <= a.date+5
使用 BETWEEN
运算符。
proc sql;
create table want as
select *
from have1 t1 inner join have2 t2
on t1.id = t2.id
and t2.date BETWEEN t1.date-5 AND t1.date+5
;
quit;
示例数据:
data have1;
infile datalines4 delimiter="|";
input id date :date9.;
format date date9.;
datalines4;
1|15DEC2021
2|12NOV2020
3|10JAN2019
;;;;
data have2;
infile datalines4 delimiter="|";
input id date :date9.;
format date date9.;
datalines4;
1|20DEC2021
2|16NOV2020
3|19JAN2019
;;;;
proc sql;
create table want as
select t1.id
from have1 t1 inner join have2 t2
on t1.id = t2.id
and t2.date BETWEEN t1.date-5 AND t1.date+5
;
quit;
Result:
id
1
2