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

时间:2016-08-12 09:36:01

标签: merge sas conditional

我很擅长使用SAS,并希望在合并两个不包含一个密钥标识符但需要三个条件组合成功合并的数据集时请求帮助。

我有两个数据集:

  • 数据集1包含有关客户访问的信息,包括StartDateEndDateEmployeeNumberCustomerNumber
  • 数据集2包含除了"日期"之外可能在访问期间执行的某些活动的信息。活动开始后EmployeeNumberCustomerNumber

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

重要的是,活动数据集中的日期变量仅在某一天,而在访问数据集中,它是开始日期和结束日期之间的范围。所以,数据集如下所示: Base datasets

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

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

    因此,理想的新数据集如下所示: Intended result of merge
    如果活动数据集中没有条目,则新数据集应仅包含相应变量的空白。对于所有匹配,它应该添加相应的变量。

    在SAS中尝试(相当简单)合并语句时,我通常会收到一条错误消息,指出" BY变量没有在数据集上正确排序"。此外,我不确定如何正确实施条件(特别是日期与范围的匹配)。

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

1 个答案:

答案 0 :(得分:0)

我倾向于使用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;
相关问题