SAS通过合并附加条件

时间:2016-11-14 18:24:38

标签: merge sas

我有两个SAS数据集,我试图将它们与一个共同的变量合并在一起(在变量下面的mcve是record)。虽然有这种合并的条件,但这就是我遇到的麻烦。我需要将fileonefiletwo合并到record,但filetwo中与fileone匹配的行必须满足以下条件:{{1如果intervention_date有多个case_start,则必须在记录“case_start之后(以及下一个record之前)。

以下是case_start

的示例
fileone

以下是data fileone; input record case_start :date9. age; format case_start date9.; datalines; 1 01jun2015 10 1 15jan2016 11 1 19jul2016 11 2 11aug2016 15 ; run;

的示例
filetwo

要指出一些事项,来自data filetwo; input record intervention_date :date9. county :$10.; format intervention_date date9.; datalines; 1 24mar2016 Denver 1 10sep2015 Denver 1 20oct2016 Denver 2 15nov2016 Boulder 2 12dec2016 Boulder ; run; 的{​​{1}}可以有多个record日期(请参阅fileone)以及每个case_start和{{{ 1}}日期,来自record=1的{​​{1}}可以有多个record(请参阅case_start)。

更具体地说,这就是我想要制作的东西:

record

现在,像简单的合并之类的东西不起作用,因为它只与filetwo匹配:

intervention_date

是否有任何建议将这两个数据集与此日期条件合并?这可能来自简单的SAS数据步骤,因为我对proc sql不是很熟悉吗?我已经看到proc sql完成了这项工作,但想知道数据步骤。

1 个答案:

答案 0 :(得分:0)

您可以使用SET按日期交错文件。然后,您可以将FILEONE中的值保留到FILETWO的记录中。在开始新的RECORD值时清除保留的值。

proc sort data=filetwo; by record intervention_date ; run;

data want ;
  set fileone (in=in1 rename=(case_start=intervention_date age=agex))
      filetwo (in=in2)
  ;
  by record intervention_date ;
  if first.record then call missing(case_start,age);
  format case_start date9.;
  retain case_start age ;
  if in1 then case_start = intervention_date ;
  if in1 then age=agex ;
  if in2 then output;
  drop date agex ;
run;