在SAS中以3个变量为条件合并两个数据集

Merging two datasets conditional on 3 variables in SAS

我对使用 SAS 很陌生,想请您帮助合并两个不包含一个关键标识符但需要三个条件的组合才能成功合并的数据集。

我有两个数据集:

目标是保留第一个数据集并在第二个数据集可用时添加信息 - 基于日期、员工编号和客户编号的匹配。

重要的是,activity 数据集中的日期变量正好是一天,而在访问数据集中,它是开始日期和结束日期之间的范围。因此,数据集如下所示: Base datasets

从逻辑上讲,应该是基于三个条件的合并:

  1. IF EmployeeNumber = EmployeeNumber
  2. IF CustomerNumber = CustomerNumber
  3. 如果日期介于 StartDate 和 EndDate 之间
    然后:使用来自 activity 数据集
  4. 的信息更新访问数据集

所以,理想的新数据集应该是这样的: Intended result of merge
如果 activity 数据集中没有条目,则新数据集应该只包含相应变量的空白。对于所有匹配项,它应该添加相应的变量。

在 SAS 中尝试(相当简单)合并语句时,我通常会收到一条错误消息,指出 "BY variables are not properly sorted on data set"。此外,我不确定如何正确实施条件(尤其是日期与范围的匹配)。

这种合并可以在 SAS 或 SQL 中完成吗?
非常感谢任何帮助!!!

我倾向于使用 proc sql 来处理这种东西,它只是一个相对简单的连接,SQL 擅长。尝试这样的事情:

proc sql;

create table merged_data as
  select a.*, b.other_variable, b.other_variable2
  from dataset1 as a
  left join dataset2 as b 
    on a.EmployeeNumber = b.EmployeeNumber 
    and a.CustomerNumber = b.CustomerNumber
    and b.Date between a.StartDate and a.EndDate
;

quit;