首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >识别重叠用药

识别重叠用药
EN

Stack Overflow用户
提问于 2020-02-28 17:34:48
回答 1查看 84关注 0票数 0

在SAS社区上也被问及,没有得到正确的回答。https://communities.sas.com/t5/SAS-Programming/Identifying-overlap-medication-use/m-p/628115#M185541

我也有类似的问题-

https://communities.sas.com/t5/SAS-Programming/Concomitant-drug-medication-use/m-p/339879#M77587

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

例如:

代码语言:javascript
复制
+----+------+-----------+-----------+-----------+
| 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  |
+----+------+-----------+-----------+-----------+

在这里,三个A的药方是重叠的。

所以使用链接中的代码可以得到像A-A-B这样的组合

而我不想这样。

但是,我想说明药品A的重叠天数。因此,我想将第二行处方改为2010年3月20日至2010年4月19日。第三个A的处方也是如此。

我试过的代码-

代码语言:javascript
复制
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;

但即使这样我也得到了错误的结果-

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-28 20:24:17

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

示例:

Shift始终被应用,但当没有重叠发生时将为零。在计算之后,在保留变量中跟踪先前的结束。代码不需要依赖于LAG

代码语言:javascript
复制
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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60448872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档