【发布时间】:2021-04-19 11:16:21
【问题描述】:
我正在尝试加入一个数据集,该数据集包含多个 ID 的多个日期,甚至同一日期的多个行,其中一个包含多个 ID 的多个日期。
让我们称之为Data1
ID | Date | PostDate1 | PostDate2
01 | 01/01/2020 | 02/01/2020 | 03/01/2020
01 | 06/01/2020 | 07/01/2020 | 08/01/2020
02 | 02/01/2020 | 03/01/2020 | 04/01/2020
02 | 03/01/2020 | 04/01/2020 | 05/01/2020
这是Data2
ID | Date | Code
01 | 01/01/2020 | AA
01 | 01/01/2020 | .
01 | 02/01/2020 | BB
01 | 02/01/2020 | AA
01 | 04/01/2020 | BB
01 | 07/01/2020 | .
01 | 07/01/2020 | BB
01 | 07/01/2020 | .
01 | 08/01/2020 | AA
02 | 03/01/2020 | .
02 | 03/01/2020 | AA
02 | 04/01/2020 | AA
02 | 04/01/2020 | BB
03 | 04/01/2020 | .
我想合并它们,使PostCode1 和PostCode2 中只有一个值。
应该是这样的:
ID | Date | PostDate1 | PostDate2 | PostCode1 | Postcode2
01 | 01/01/2020 | 02/01/2020 | 03/01/2020 | BB | .
01 | 06/01/2020 | 07/01/2020 | 08/01/2020 | BB | AA
02 | 02/01/2020 | 03/01/2020 | 04/01/2020 | AA | BB
02 | 03/01/2020 | 04/01/2020 | 05/01/2020 | BB | .
但这只是一个例子,我不确定条件,即我不确定是否要选择:
-按字母顺序排列的第一个
-按字母顺序排列的最后一个
-如果没有丢失就可以了
-一个特定的,如果它在那个日期存在,如果它不存在,那么任何
是否可以创建一个代码,让我可以根据我想要应用的条件轻松更改其中的一部分?
我目前用于加入的代码是:
proc sql;
create table new as
select distinct a.*
, data2_1.code as PostCode1
, data2_2.code as PostCode2
from data1 a
left join data2 data2_1
on a.id=data2.id and a.postdate1=data2.date
from data1 a
left join data2 data2_2
on a.id=data2.id and a.postdate2=data2.date
这当前返回的行数与每个日期的代码一样多。
【问题讨论】: