【发布时间】:2020-04-29 03:37:42
【问题描述】:
我希望你能帮助我! 请帮忙!!!!
我在使用 PROC SQL 的 SAS 中,我有数据集 A 和 B 具有不同的测量值(与患者的健康有关),如下所示:
数据集 A
ID Date measurement_a
1 20JUN2013 52.3
1 12JUL2013 65.6
1 28NOV2014 37.4
1 02DEC2014 61.3
1 22SEP2015 40.5
1 15OCT2015 60.5
2 03JUN2011 46.5
2 19JUL2011 54.1
2 29OCT2012 53.6
...
数据集 B
ID Date measurement_b
1 21MAR2007 43
1 13JUL2007 45
1 07APR2009 47
1 14MAY2009 46
1 16FEB2012 42
1 27AUG2012 53
1 12DEC2012 58
1 20JUN2013 56
1 10DEC2013 53
1 23MAY2014 49
1 17SEP2014 44
1 23SEP2015 40
2 16DEC2011 58
2 22AUG2012 54
2 20FEB2013 56
2 29MAY2013 53
...
我正在寻找的是,如果数据集 B 中的日期在数据集 a 中的日期的 6 个月内,那么将添加一个名为“时间”的新变量,例如 1、2、3 等。有多少与 ** only measure_a** 长度匹配(换句话说,如果 measure_b 的值与数据集 a 中的日期不匹配,我不需要保留它。这是我的意思的一个示例:
所需结果/数据集:
ID Time measurement_a measurement_b
1 1 52.3 56 (Dataset B Date = 20JUN2013 - Matched exactly)
1 2 65.6 53 (Dataset B date = 10DEC2013 - Within six months of 12JUL2013 [Dataset A Date])
1 3 37.4 44 (Dataset B date = 17SEP2014 - Within six months of 28NOV2014 [Dataset A Date])
1 4 61.3 . (because 17SEP2014 [Dataset B] is closest to 28NOV2014 [Dataset A])
1 5 40.5 40 (because 23SEP2015 [Dataset B] is closest to 22SEP2015 [Dataset A])
1 6 60.5 . (No date in Dataset B that is within 6 months of Date in Dataset A [15OCT2015])
2 1 46.5 . (See below)
2 2 54.1 58 (because 03JUL2011 [Dataset B] is closest to 19JUL2011 [Dataset A])
2 3 53.6 54 (Dataset B date = 22AUG2012 - Within 6 months of Dataset A date = 29OCT2012)
...
我已经加入了 ID,但时间证明很困难。我知道这可能是以下代码中“where”语句中的月份差异:
PROC SQL;
CREATE TABLE join_test as
SELECT * FROM data_a as a
LEFT_JOIN data_b as b
ON a.id = b.id
WHERE days(a.Date - b.Date) <= 180 ;
QUIT;
但这并不能解决问题。
可以请帮助我吗?
我真的很感激。提前致谢。
【问题讨论】:
-
每“数据集 B 中的日期在数据集 a 中的日期的 6 个月内”,您的意思是说 B 中的日期在 A 中的日期之后最多 6 个月? B日期是否可以在以A日期为中心的12个月内(即从前6个月到后6个月)