关于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数据集编程时的一些想法,后面会持续更新。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354

推荐阅读更多精彩内容