Sas 确定重叠用药

Sas 确定重叠用药,sas,Sas,当被问及SAS社区时,也没有得到正确的回答。 我有一个问题,类似于- 然而我有一个问题,我有相同的药物重叠以及- 例如: 这里的三个A处方是重叠的 因此,使用链接中的代码可以提供类似A-A-B的组合 然而我不想那样 但是,我想说明药物A的重叠天数。因此,我想将第二排处方改为2010年3月20日至2010年4月19日。同样地,第三方也是处方 我试过的代码- data have2; set have_sorted1; format NEW_START_DT NEW_END_DT _lagEND_

当被问及SAS社区时,也没有得到正确的回答。

我有一个问题,类似于-

然而我有一个问题,我有相同的药物重叠以及-

例如:

这里的三个A处方是重叠的

因此,使用链接中的代码可以提供类似A-A-B的组合

然而我不想那样

但是,我想说明药物A的重叠天数。因此,我想将第二排处方改为2010年3月20日至2010年4月19日。同样地,第三方也是处方

我试过的代码-

data have2;
set have_sorted1;
format NEW_START_DT NEW_END_DT _lagEND_DT date9.;

_lagID = lag(patient_ID);
_lagDRUG = lag(drg_cls);
_lagEND_DT = lag(rx_ed_dt);

if patient_ID = _lagID and drg_cls= _lagDRUG and rx_st_dt <= _lagEND_DT then flag=1;
else flag = 0;


retain NEW_START_DT NEW_END_DT;

if flag=0 then do;
NEW_START_DT = rx_st_dt;
NEW_END_DT = rx_ed_dt;
end;
else do;
New_start_dt = NEW_End_DT + 1;
NEW_END_DT = new_start_dt + DAY_SUPP ;
end;
/* drop flag _:;*/
run;

在跟踪向前移动天数的shift变量中隐式跟踪“标志”状态可能更容易

例如:

始终应用Shift,但在不发生重叠时将为零。计算后,在保留变量中跟踪前一个端点。代码不需要依赖于
滞后

data have;
infile cards firstobs=3 dlm='|';
input ID DRUG: $ START_DT: mmddyy10. DAYS_SUPP END_DT: mmddyy10.;
format start_dt end_dt mmddyy10.;
datalines;
| ID | DRUG | START_DT  | DAYS_SUPP |  END_DT   |
+----+------+-----------+-----------+-----------+
|  1 | A    | 2/17/2010 |        30 | 3/19/2010 |
|  1 | A    | 3/17/2010 |        30 | 4/16/2010 |
|  1 | A    | 4/12/2010 |        30 | 5/12/2010 |
|  1 | A    | 8/20/2010 |        30 | 9/19/2010 |
|  1 | B    | 5/6/2009  |        30 | 6/5/2009  |
;

data want;
  set have;
  by id drug;

  retain shift prior_shifted_end;

  select;
    when (first.drug) shift = 0;
    when (prior_shifted_end > start_dt) shift = prior_shifted_end - start_dt + 1;
    otherwise shift = 0;
  end;

  original_start_dt = start_dt;
  original_end_dt = end_dt;

  start_dt + shift;
  end_dt + shift;

  prior_shifted_end = end_dt;

  format prior: original: mmddyy10.;
run;

当存在重叠时,其他药物是否出现交叉?A第三个A与第四个A重叠的地方?如果是这样,您是否仍希望转换发生?如果没有药物交错,排序顺序是否始终基于
id,drug
?非常感谢!这种不依赖滞后的方法很好。
id  Drug    drug_start  day_supp    drug_end    New_start   New_end
15  A   6-Sep-15    30  5-Oct-15    6-Sep-15    5-Oct-15
15  A   24-Sep-15   90  22-Dec-15   6-Oct-15    4-Jan-16
15  A   6-Dec-15    90  4-Mar-16    5-Jan-16    4-Apr-16
15  A   26-Feb-16   90  25-May-16   5-Apr-16    4-Jul-16
15  A   29-May-16   90  26-Aug-16   29-May-16   26-Aug-16
15  A   7-Dec-16    90  6-Mar-17    7-Dec-16    6-Mar-17
15  A   17-Feb-17   90  17-May-17   7-Mar-17    5-Jun-17
data have;
infile cards firstobs=3 dlm='|';
input ID DRUG: $ START_DT: mmddyy10. DAYS_SUPP END_DT: mmddyy10.;
format start_dt end_dt mmddyy10.;
datalines;
| ID | DRUG | START_DT  | DAYS_SUPP |  END_DT   |
+----+------+-----------+-----------+-----------+
|  1 | A    | 2/17/2010 |        30 | 3/19/2010 |
|  1 | A    | 3/17/2010 |        30 | 4/16/2010 |
|  1 | A    | 4/12/2010 |        30 | 5/12/2010 |
|  1 | A    | 8/20/2010 |        30 | 9/19/2010 |
|  1 | B    | 5/6/2009  |        30 | 6/5/2009  |
;

data want;
  set have;
  by id drug;

  retain shift prior_shifted_end;

  select;
    when (first.drug) shift = 0;
    when (prior_shifted_end > start_dt) shift = prior_shifted_end - start_dt + 1;
    otherwise shift = 0;
  end;

  original_start_dt = start_dt;
  original_end_dt = end_dt;

  start_dt + shift;
  end_dt + shift;

  prior_shifted_end = end_dt;

  format prior: original: mmddyy10.;
run;