2016-11-14 58 views
0

我有兩個SAS數據集,我試圖合併一個共同的變量(在變量下方的mcve是record)。雖然這種合併有一個條件,那就是我遇到的問題。我需要recordfiletwo合併fileone,但是從filetwofileone匹配的行必須滿足以下條件:intervention_date必須是後記錄case_start(和先下一case_start如果record有一個以上的case_start )。SAS通過合併附加條件

下面是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; 

要指出的幾件事情,一個recordfileone可以有多個case_start日期(見record=1)並且對於每個recordcase_start日期,來自filetworecord可以具有多個intervention_date(見record=2)。

更具體而言,這是我想產生:

data what_merge_should_look_like; 
    input record case_start :date9. age intervention_date :date9. county :$10.; 
    format case_start intervention_date date9.; 
    datalines; 
1 01jun2015 10 10sep2015 Denver 
1 15jan2016 11 24mar2016 Denver 
1 19jul2016 11 20oct2016 Denver 
2 11aug2016 15 15nov2016 Boulder 
2 11aug2016 15 12dec2016 Boulder 
; 
run; 

現在,像一個簡單的合併不起作用,因爲它只能通過record匹配:

/* data already sorted on by variable */ 
data fileone_two; 
    merge fileone 
      filetwo; 
    by record; 
run; 

是否有任何建議合併這兩個數據集與這個日期條件?這可能來自一個簡單的SAS數據步驟,因爲我對proc sql不是很熟悉?我已經看到這與proc sql完成,但想知道關於數據步驟。

回答

0

您可能可以使用SET按日期交錯文件。然後,您可以將FILEONE中的值保留到FILETWO的記錄中。在開始記錄新值時清除保留值。

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;