关于SDTM编程的一些想法(1) --Trial Design、DM

根据SDTM IG,SDTM数据集共分为三大类:Special-Purpose,General Observation,Trial Design。我们熟知的Interventions、Events、Findings、Findings About,是General Observation之下的子类别。既然是划分为各个类别,每个类别中的必然有其相似性,不同类别之间必然有其特殊性。考虑到这种情况,我就从SDTM数据集的分类角度,谈一谈我对SDTM编程步骤的一些想法。

一般步骤

从一般性角度来看,SDTM数据集编程,必然涉及到以下这3个步骤:

  1. 获取原始数据;
  2. 生成变量;
  3. 输出数据集。

前两个步骤是我们SDTM SAS编程的主体,绝大部分的编程时间集中在这两步。对于第3步,一般都会有相应的SAS宏程序读取SDTM说明文档的信息,完成对数据集以及变量的属性设置;如果没有相应的宏程序,那只能手动编程进行设置,很简单,只是过程有些繁琐。

分享一个手动设置变量属性的代码,其中的label、length的内容其实是从SDTM说明文档中直接复制的。宏变量keepvarssortvars, 是在程序开始就手动定义好的。一般各个公司都有处理这一块内容的宏程序,以后会在其他文章中分享宏程序处理这部分内容的逻辑。

***Finalize dataset;
data sdtm.dm(encoding="asciiany");
    attrib
        STUDYID         label="Study Identifier"                        length=$20
        DOMAIN          label="Domain Abbreviation"                     length=$2
        USUBJID         label="Unique Subject Identifier"               length=$30
        SUBJID          label="Unique Subject Identifier"               length=$10
        RFSTDTC         label="Subject Reference Start Date/Time"       length=$20
        RFENDTC         label="Subject Reference End Date/Time"         length=$20
        RFXSTDTC        label="Date/Time of First Study Treatment"      length=$20
        RFXENDTC        label="Date/Time of Last Study Treatment"       length=$20
        RFICDTC         label="Date/Time of Informed Consent"           length=$20
        DTHDTC          label="Date/Time of Death"                      length=$20
        DTHFL           label="Subject Death Flag"                      length=$1
        SITEID          label="Study Site Identifier"                   length=$10
        BRTHDTC         label="Date/Time of Birth"                      length=$20
        AGE             label="Date/Time of Birth"                      
        AGEU            label="Age Units"                               length=$10
        SEX             label="Sex"                                     length=$6
        RACE            label="Race"                                    length=$10
        RACEOTH         label="Race, Other"                             length=$50
        ARMCD           label="Planned Arm Code"                        length=$8
        ARM             label="Description of Planned Arm"              length=$40
        ACTARMCD        label="Actual Arm Code"                         length=$8
        ACTARM          label="Description of Actual Arm"               length=$40
        COUNTRY         label="Country"                                 length=$10
    ;

    set dm2  ;
    keep &keepvars.;

    proc sort;
        by &sortvars.;
run;

Trial Design数据集

试验设计数据集的内容一般直接来自Protocol,数据集的完整变量信息会保存到特定的EXCEL文件中,SAS编程时直接读取EXCEL文件,设置下格式就可以直接输出试验设计数据集。以某个项目中的TE为例,EXCEL文件中的内容,就是输出数据集中的内容。

TE

Special-Purpose数据集

特殊目的类主要有4个数据集:DM、SV、SE和CO。

DM

先介绍DM的编程思路,我一般将DM变量分为以下几类,在编程过程中集中处理同一类变量。

  • 人口学信息相关变量 (AGE、SEX、RACE、ETHNIC、BRTHDTC、COUNTRY)
  • 给药时间相关变量 (RFXSTDTC、RFXENDTC)
  • 试验处置相关变量 (RFICDTC、DTHDTC)
  • 研究地区或研究者相关变量 (SITEID、INVID、INVNAM)
  • 受试者分组相关变量 (ARM、ARMCD、ACTARM、ACTARMCD)
  • 参照时间相关变量 (RFSTDTC、RFENDTC、RFPENDTC)
人口学信息相关变量

人口学相关变量的原始信息通常来源于CRF中Demographics页,直接引用原始变量值,就可以完成变量的生成。

给药时间相关变量

研究治疗的首次、末次时间(RFXSTDTC、RFXENDTC),来源于CRF中Investigtional Product Administration页。这里于人口学变量直接引用原始值不同,这两个变量需要对治疗时间进行排序,筛选出最早或最迟时间进行赋值。

试验处置相关变量

知情同意签署时间(RFICDTC)信息一般来源于CRF中的Subject Enrollment页,这一页的信息也会保存到DS数据集中的PROTOCOL MILESTONE的类别中。死亡时间(DTHDTC)信息的来源一般有两个CRF页:Adverse Event 和 End of Study,这两页中会有死亡相关信息的记录,编程时引用这个原始数据集的变量。

研究地区或研究者相关变量

研究地区或研究者相关变量信息,一般原始数据中会提供,根据数据集中的关键变量进行拼接(例如,SITEID)就可获取。

受试者分组相关变量

受试者分组相关变量,分为两部分:计划分组(ARM、ARMCD) 和实际分组(ACTARM、ACTARMCD)。计划分组的信息通常会来源于CRF中 Enrollment页,例如,Cohort信息;或者是Vendor提供的针对每个受试者分组信息的特定数据集,计划分组信息在受试者入组时确定。

实际分组信息是根据受试者实际用药情况进行判定的,而实际用药信息来源于CRF中Investigtional Product Administration页。在生成实际分组变量时,要考虑一些特殊情况。对绝大多数受试者来讲,计划分组和实际分组是一致的。但也有部分受试者由于各种原因,误服了其他计划药物(与计划分组不一致) 、服用试验计划外药物(ACTARM=“Unplanned Treatment”) 或者未服药(ACTARM=“Not Treated”)。这些情况,在实际编程过程中要具体处理。

参照时间相关变量

参照开始时间(RFSTDTC),通常为第一次给药时间(RFXSTDTC)。若首次给药时间为空,一般会用受试者进行随机化的时间进行替代。对于所有参与随机化的受试者,RFSTDTC不能为空;若受试者筛选失败或未分组,RFSTDTC为空。

参照结束时间(RFENDTC),通常为研究结束时间,这个信息来源与CRF中End of Study页;也常等于受试者最后一次给药时间。对于所有参与随机化的受试者,RFSTDTC不能为空;若受试者筛选失败或未分组,RFSTDTC为空。

参与结束时间(RFPENDTC),方案中定义的受试者结束参与或结束随访的时间,对应最后一次接触受试者的时间。这个变量的编程过程,相对复杂一点。我们需要将受试者所有活动的时间整理到一个数据集中,排序选出最晚的那一个时间进行赋值。这过程中有两个注意点,第一,关于受试者的“所有活动”不能有遗漏,否则丢失的那个时间可能恰好是RFPENDTC;第二,保存受试者各项活动信息的数据集收集的时间变量的格式可能不同,在编程过程中需要转换成相同的格式,进行排序筛选。

以上是SDTM数据集编程时的一些想法,后面会持续更新。

若有疑问,欢迎评论区讨论!

你可能感兴趣的:(关于SDTM编程的一些想法(1) --Trial Design、DM)