首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确定接受治疗的人数

确定接受治疗的人数
EN

Stack Overflow用户
提问于 2016-05-11 13:40:50
回答 1查看 143关注 0票数 0

嗨,朋友们,

我正在利用医院访问数据进行一些研究项目。我必须确认那些改变了治疗方式的受试者。

治疗分为局部治疗、非生物系统治疗和生物治疗.切换事件被定义为在上一次治疗停药时未分发的药物的停用。有一个等级,上面有生物制品,然后是非生物系统,然后是局部的。

  • 如果第一次观察到病人退出局部治疗,那么在此之后,任何对生物、非生物系统或新的局部的治疗都是一种切换。
  • 如果第一次观察到病人退出了非生物系统,那么在此之后,任何对生物系统或新的非生物系统治疗的退出都是一种切换。
  • 任何局部的退出都不是一种转变。
  • 如果第一次观察到病人提取了生物,则只能切换到另一种生物(与第一种不同)。
  • 任何局部或非生物系统的退出都不是一种转变。

根据上述逻辑,一旦病人转往较高的治疗类别,较低的类别便会被视为伴随的药物,而同时停用的药物并不表示有治疗的转变。

简而言之,如果病人从较低级别的治疗转移到上层或使用相同的类别(不同的ATC代码),那么它将被视为一种切换。

治疗等级

生物制品> Non_Bio_Sys >局部

我正在为引用添加示例数据集,并提供可变信息:

代码语言:javascript
复制
LPNR: unique subjID
EDATUM: prescrition date ( treatment recieved date)
ATC_CODE: codes for each of treament type
          'D05AX52',
          'D05AX02' = PSorasis(Topical) ;

          'L01XC02',
          'L04AA24',
          'L04AB01',
          'L04AB02',
          'L04AB04',
          'L04AB05',
          'L04AB06',
          'L04AC03',
          'L04AC07' = Non_Bio_systemic ;

          'A11CC03',           
          'D05BB02',                
          'L01BA01',               
          'L01BB03',               
          'L01XX05',               
          'L04AA21',               
          'L04AD01',               
          'L04AX03' = Biologics ;
TYPE: Treatment type

样本数据:

代码语言:javascript
复制
data have;
  length TYPE $20.;
  input pnr ATC_CODE $ type $ EDATUM $ 10. ;
  date=input(edatum,mmddyy10.);
  format date mmddyy10.;
  cards;
478 L04AX03 Nonbiologic_systemic 2/10/2010 
478 D05AX52 Psoriasis 2/23/2010 
478 L04AX03 Nonbiologic_systemic 3/5/2010 
478 L04AX03 Nonbiologic_systemic 5/18/2010 
478 L04AX03 Nonbiologic_systemic 8/2/2010 
478 L04AX03 Nonbiologic_systemic 11/3/2010
478 L04AX03 Nonbiologic_systemic 2/7/2011 
478 L04AX03 Nonbiologic_systemic 8/16/2011
478 L04AX03 Nonbiologic_systemic 11/22/2011
603 D05AX02 Psoriasis 8/24/2005 
603 D05AX02 Psoriasis 10/13/2005 
603 D05AX02 Psoriasis 6/2/2006
603 D05AX02 Psoriasis 7/19/2006 
603 D05AX02 Psoriasis 4/3/2007
603 D05AX02 Psoriasis 12/7/2007 
603 D05AX02 Psoriasis 1/4/2008
603 D05AX02 Psoriasis 1/4/2008 
603 D05AX02 Psoriasis 10/2/2008
603 D05AX52 Psoriasis 3/16/2009
603 D05AX52 Psoriasis 3/16/2009
603 D05AX52 Psoriasis 5/7/2009
603 D05AX52 Psoriasis 8/21/2009
603 D05AX52 Psoriasis 11/9/2009 
603 D05AX52 Psoriasis 3/19/2010 
603 D05AX52 Psoriasis 7/30/2010 
603 D05AX52 Psoriasis 7/30/2010
603 D05AX52 Psoriasis 1/13/2011 
603 D05AX52 Psoriasis 5/3/2011 
603 D05AX52 Psoriasis 12/12/2011
1103 L04AX03 Nonbiologic_systemic 1/17/2006
1103 L04AX03 Nonbiologic_systemic 8/23/2006
1103 L04AX03 Nonbiologic_systemic 11/9/2006
1103 D05AX52 Psoriasis 4/19/2007 
1103 L04AX03 Nonbiologic_systemic 4/19/2007 
1103 D05AX52 Psoriasis 10/26/2007 
1103 D05AX52 Psoriasis 4/1/2008
1103 L04AX03 Nonbiologic_systemic 10/20/2008 
1103 D05AX52 Psoriasis 10/20/2008
1103 L04AX03 Nonbiologic_systemic 4/7/2009 
1103 L04AX03 Nonbiologic_systemic 11/20/2009 
1103 L04AX03 Nonbiologic_systemic 11/12/2010 
1103 L04AX03 Nonbiologic_systemic 8/12/2011
1103 D05AX52 Psoriasis 10/22/2011 
1103 D05AX52 Psoriasis 12/29/2011
;

我尝试过的解决方案:

代码语言:javascript
复制
proc sort data=have;
  by pnr date;
run;

/* Identifying the number of subjects who had treatment switch */
data need;
  set have;
  length change $ 10.;
  by pnr;

  /* Create new variable change and keep constant if it is topical for first observation */
  /* Compare topical values with next values if it changes to other non bio or bio then switched */
  if first.pnr and atc_code in ( 'D05AX52','D05AX02') then change="";
  else if not first.pnr and atc_code not in('D05AX52','D05AX02','L01XC02','L04AA24','L04AB01',
                                            'L04AB02','L04AB04','L04AB05','L04AB06','L04AC03',
                                            'L04AC07','A11CC03','D05BB02','L01BA01','L01BB03',
                                            'L01XX05' ,'L04AA21' ,'L04AD01' ,'L04AX03') then change='switched';
  /* Compare non bio values with next values if it changes to other non bio or bio then switched*/
  if first.pnr and atc_code in ('L01XC02','L04AA24','L04AB01','L04AB02','L04AB04',
                                'L04AB05','L04AB06','L04AC03','L04AC07') then change="";
  else if not first.pnr and atc_code not in( 'D05AX52','D05AX02') and 
                            atc_code in('L01XC02','L04AA24','L04AB01','L04AB02','L04AB04','L04AB05',
                                        'L04AB06','L04AC03','L04AC07','A11CC03','D05BB02','L01BA01',
                                        'L01BB03' ,'L01XX05' ,'L04AA21' ,'L04AD01' ,'L04AX03') then change='switched';

  /* Compare bio with next values if it changes to other bio then switched */
  if first.pnr and atc_code in('A11CC03','D05BB02','L01BA01','L01BB03' ,'L01XX05' ,
                               'L04AA21' ,'L04AD01' ,'L04AX03') then change='';
  else if not first.pnr and atc_code not in('D05AX52','D05AX02') and 
                            atc_code in('A11CC03','D05BB02','L01BA01','L01BB03' ,'L01XX05',
                                        'L04AA21' ,'L04AD01' ,'L04AX03') then change='switched';

  if atc_code=lag(atc_code) then change="";                        
run;

我期望的结果

代码语言:javascript
复制
pnr   ATC_CODE  TYPE                  EDATUM      Flag_switch
478   L04AX03   Nonbiologic_systemic  2/10/2010
478   D05AX52   Psoriasis             2/23/2010
478   L04AX03   Nonbiologic_systemic  5/18/2010   switch
478   L04AX03   Nonbiologic_systemic  8/2/2010
478   L04AX03   Nonbiologic_systemic  11/3/2010
478   L04AX03   Nonbiologic_systemic  2/7/2011
478   L04AX03   Nonbiologic_systemic  8/16/2011
478   L04AX03   Nonbiologic_systemic  11/22/2011
603   D05AX02   Psoriasis             8/24/2005
603   D05AX02   Psoriasis             10/13/2005
603   D05AX02   Psoriasis             6/2/2006
603   D05AX02   Psoriasis             7/19/2006
603   D05AX02   Psoriasis             4/3/2007
603   D05AX02   Psoriasis             12/7/2007
603   D05AX02   Psoriasis             1/4/2008
603   D05AX02   Psoriasis             10/2/2008
603   D05AX52   Psoriasis             3/16/2009   switch
603   D05AX52   Psoriasis             5/7/2009
603   D05AX52   Psoriasis             8/21/2009
603   D05AX52   Psoriasis             11/9/2009
603   D05AX52   Psoriasis             3/19/2010
603   D05AX52   Psoriasis             7/30/2010
603   D05AX52   Psoriasis             1/13/2011
603   D05AX52   Psoriasis             5/3/2011
603   D05AX52   Psoriasis             12/12/2011
1103  L04AX03   Nonbiologic_systemic  1/17/2006
1103  L04AX03   Nonbiologic_systemic  8/23/2006
1103  L04AX03   Nonbiologic_systemic  11/9/2006
1103  L04AX03   Nonbiologic_systemic  4/19/2007
1103  D05AX52   Psoriasis             10/26/2007
1103  D05AX52   Psoriasis             4/1/2008
1103  L04AX03   Nonbiologic_systemic  10/20/2008  switch
1103  D05AX52   Psoriasis             10/20/2008
1103  L04AX03   Nonbiologic_systemic  4/7/2009    switch
1103  L04AX03   Nonbiologic_systemic  11/20/2009
1103  L04AX03   Nonbiologic_systemic  11/12/2010
1103  L04AX03   Nonbiologic_systemic  8/12/2011
1103  D05AX52   Psoriasis             10/22/2011
1103  D05AX52   Psoriasis             12/29/2011
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-12 04:08:42

好吧。以下是几种可能的解决方案之一。您仍然需要为治疗类型3(生物制品)计算出开关,并弄清楚如何处理在同一日期有多个条目的地方。但这会让你走的!

准备数据

代码语言:javascript
复制
proc format;
  value treatType 1 = "Topical"
                  2 = "Non-biologic systemics"
                  3 = "Biologics";
run;

data have;
  format pnr 8. tType treatType. tCode $10. date YYMMDDs8.;
  informat tType 1. date yymmdd10.;
  input pnr tCode tType date;
  datalines;
478 L04AX03 2 2010-02-10
478 D05AX52 1 2010-02-23
478 L04AX03 2 2010-03-05
478 L04AX03 2 2010-05-18
478 L04AX03 2 2010-08-02
478 L04AX03 2 2010-11-03
478 L04AX03 2 2011-02-07
478 L04AX03 2 2011-08-16
478 L04AX03 2 2011-11-22
603 D05AX02 1 2005-08-24
603 D05AX02 1 2005-10-13
603 D05AX02 1 2006-06-02
603 D05AX02 1 2006-07-19
603 D05AX02 1 2007-04-03
603 D05AX02 1 2007-12-07
603 D05AX02 1 2008-01-04
603 D05AX02 1 2008-01-04
603 D05AX02 1 2008-10-02
603 D05AX52 1 2009-03-16
603 D05AX52 1 2009-03-16
603 D05AX52 1 2009-05-07
603 D05AX52 1 2009-08-21
603 D05AX52 1 2009-11-09
603 D05AX52 1 2010-03-19
603 D05AX52 1 2010-07-30
603 D05AX52 1 2010-07-30
603 D05AX52 1 2011-01-13
603 D05AX52 1 2011-05-03
603 D05AX52 1 2011-12-12
1103 L04AX03 2 2006-01-17
1103 L04AX03 2 2006-08-23
1103 L04AX03 2 2006-11-09
1103 D05AX52 1 2007-04-19
1103 L04AX03 2 2007-04-19
1103 D05AX52 1 2007-10-26
1103 D05AX52 1 2008-04-01
1103 L04AX03 2 2008-10-20
1103 D05AX52 1 2008-10-20
1103 L04AX03 2 2009-04-07
1103 L04AX03 2 2009-11-20
1103 L04AX03 2 2010-11-12
1103 L04AX03 2 2011-08-12
1103 D05AX52 1 2011-10-22
1103 D05AX52 1 2011-12-29
run;

计算开关变量

代码语言:javascript
复制
proc sort data=have;
  by pnr date;
run;

data want;
  set have;
  by pnr;
  format switch 1. tCode_prev $10. tType_prev 3.;
  retain tCode_prev '' tType_prev .;
  format switch 1.;

  if first.pnr then do;
    switch = 0;
  end;

  else if tType_prev = 1 then do;
    if tType > 1 or tCode ne tCode_prev then switch = 1;
    else switch = 0;
  end;

  else if tType_prev = 2 then do;
    if tType > 2 or (tType = 2 and tCode ne tCode_prev) then switch = 1;
    else switch = 0;
  end;

  else if tType_prev = 3 then do;
    /* Here's your homework */
  end;

  output;    
  tCode_prev = tCode;
  tType_prev = tType;

  drop tCode_prev tType_prev;
run;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37164479

复制
相关文章

相似问题

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