首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >确定强化治疗日期

确定强化治疗日期
EN

Stack Overflow用户
提问于 2020-03-12 12:58:11
回答 1查看 43关注 0票数 0

我有数据看起来像是-

代码语言:javascript
运行
复制
data abc;
input ID $ drug $ episode start_date date9. end_date date9.;
format start_date end_date date9.;
informat start_date end_date date9.;
datalines ;
1 A 1 01Jan2012 30Mar2012
1 A 2 01May2012 03Jul2012
1 A 3 28Sep2012 28Oct2012
1 A 4 01Nov2012 30Dec2012
1 B 1 01Apr2012 10May2012
1 B 2 02Nov2012 28Dec2012
1 B 3 01Jan2012 30Mar2012
1 C 1 01Jul2012 02Aug2012
;
run;

这里我们有受试者和他们服用的药物。一种药物的新发作意味着这个人停止使用。

如果第二次使用的药物的开始日期(第一次开始日期)介于第一次药物的两次之间,则我们将忽略第一次药物的所有后续事件。

例如:这里4月1日(药物B的开始日期)在药物A的第一集之后,所以药物A的第2,3,4集将被删除。

类似地,药物C的开始日期在药物B的第一集的结束日期之后,那么药物B的第二集将被删除。

一个主题最多可以有15集。

生成的数据集应该如下所示-

代码语言:javascript
运行
复制
ID  Drug    Episode start_date  end_date
1   A   1   1-Jan   30-Mar
1   B   1   1-Apr   10-May
1   C   1   1-Jul   2-Aug
EN

回答 1

Stack Overflow用户

发布于 2020-03-12 21:15:05

这个怎么样?为了演示,我在示例数据中添加了另一个ID。

代码语言:javascript
运行
复制
data abc;
input ID $ drug $ episode start_date :date9. end_date :date9.;
format start_date end_date date9.;
datalines ;
1 A 1 01Jan2012 30Mar2012
1 A 2 01May2012 03Jul2012
1 A 3 28Sep2012 28Oct2012
1 A 4 01Nov2012 30Dec2012
1 B 1 01Apr2012 10May2012
1 B 2 02Nov2012 28Dec2012
1 B 3 01Jan2012 30Mar2012
1 C 1 01Jul2012 02Aug2012
2 A 1 01Jan2012 30Mar2012
2 A 2 01May2012 03Jul2012
2 A 3 28Sep2012 28Oct2012
2 A 4 01Nov2012 30Dec2012
2 B 1 01Apr2012 10May2012
2 B 2 02Nov2012 28Dec2012
2 B 3 01Jan2012 30Mar2012
2 C 1 01Jul2012 02Aug2012
;
run;

data want;

    format ID drug episode start_date end_date;
    keep   ID drug episode start_date end_date;

    declare hash h ();
    h.definekey  ('ID', 'd');
    h.definedata ('_start_date');
    h.definedone ();

    do until (lr1);
        set abc (rename= (start_date = _start_date)) end=lr1;
        by ID drug;
        if first.ID   then d = 0;
        if first.drug then d + 1;
        if episode = 1 then h.add();
    end;

    do until (lr2);
        set abc end=lr2;
        by ID drug;
        if first.ID   then d = 0;
        if first.drug then do;
            d + 1; flag = 0;
        end;
        rc = h.find(key : ID, key : d+1);
        if start_date > _start_date then flag=1;
        if flag = 0 then output;
    end;

    retain flag;
run;

结果:

代码语言:javascript
运行
复制
ID  drug  episode  start_date  end_date 
1   A     1        01JAN2012   30MAR2012 
1   B     1        01APR2012   10MAY2012 
1   C     1        01JUL2012   02AUG2012 
2   A     1        01JAN2012   30MAR2012 
2   B     1        01APR2012   10MAY2012 
2   C     1        01JUL2012   02AUG2012 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60647855

复制
相关文章

相似问题

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