我有两个SAS数据集,我试图将它们与一个共同的变量合并在一起(在变量下面的mcve是record
)。虽然有这种合并的条件,但这就是我遇到的麻烦。我需要将fileone
与filetwo
合并到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完成了这项工作,但想知道数据步骤。
答案 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;