最近有新入行的读者小朋友开始做CDISC domain了,来求助我流程如何,先做什么,再做什么,需要注意什么等等,就在这里答复一下吧!
“CDISC的前世今生”会努力在后面的文章更新,今天就简明扼要地告诉刚开始做项目的新人小朋友如何更快地开始sas programming之路吧。
打开CDISC的官网(https://www.cdisc.org),可以看到这里有很多标准,不过对于临床试验SP来说,我们用得最多的基本是SDTM、ADaM,其他几乎用不到或者用得很少。我们注册一个账号登录之后就可以下载里面的文档。首先,下载一个SDTM IG 3.4, SDTM IG目前已经更新到3.4版本(2021-11-29发布)了,FDA于2023-12-23宣布接受SDTM IG 3.4。Global的项目可以使用最新标准了,国内虽然还没正式要求实施CDISC标准,但CDE也是鼓励申办方以CDISC标准递交试验数据和资料的,大型CRO、药企基本上也都是Follow CDISC标准做项目的。
翻开SDTM IG 3.4,400多页,看起来有点劝退,哈哈哈哈哈🤣。其实不用担心,我们没有必要(主要是没有时间)通读并理解所有的内容,在做项目的过程中,不断地查阅、理解就可以了。有摸鱼的时间,可以读一读前四章,了解整个SDTM标准的概念,通用的基本原则,域模型的假设等,可以对整个SDTM标准有整体的理解。
SDTM Domains/Datasets主要分为以下2类(仅列举几个例子):
-
The General Observation Classes(通用观测类)
- Interventions(干预类):EX(药物暴露)、CM(合并用药)
- Events(事件类):AE(不良事件)、CE(临床事件)
- Findings(发现类):EG(心电图)、LB(实验室检查)
-
Datasets Other than General Observation Class Domains(非通用观测类)
- Special-purpose Domains(特殊目的域):DM SE SV CO SM
- Trial Design Model Datasets(试验设计数据集):TA TE TV TD TM TI TS
-
Representing Relationships Datasets(关联数据集):RELREC RELSUB
Trial Design Model Datasets:去描述该试验计划要做什么,将会收集什么样的数据,以及试验目的等信息,是Study Level的信息,不需要等到有数据之后才开始编程,其中大多数内容都来自方案的描述。
编程的顺序通常如下:Trial Design → DM → SE → SV → Others → CO RELREC。因为在各个SDTM域中,有一些变量需要在几个Domains都存在需要保持一致,有的变量会在其他Domain参与计算,所以需要先生成。比如:TA的ARM也是DM的Req变量,需要保持一致。TV和SV中的VISIT,TI和IE的IETEST。其他Domains会用到DM、SE、SV:涉及到日期的domains,有以下变量基于RFSTDTC计算的研究日变量:--STDY、--ENDY、--DY,需要用到DM;需要做EPOCH的domains,需要用到SE;涉及到访视的domains,需要用到SV。
CO是放所有页面的备注信息,如果相关内容是各个domain做一个临时的变量存放,CO直接整合,那CO就需要最后再跑。如果CO是从各个raw data提取备注,那就无需在最后做。
-
RELREC是放所有的关联关系,需要各个domain的--SEQ, --SPID, --GRPID等标识变量做ID variable,一般需要等其他domains ready,再进行编程。
在进行SDTM编程之前我们需要以下文件:Protocol、SAP、CRF、Raw Data,参考资料: SDTM IG。
做SDTM主要是follow CDISC标准进行raw data的规范化和标准化,不会有太多的衍生、填补操作,所以SAP用得不多,Protocol主要是做Trial Design用得多一些。
CRF是DM从数据库系统导出的文件,可以如下格式: blank/annotation CRF, unique/all CRF,组合数可以导出4种格式的CRF。blank/annotation CRF区别在于是否有标注,也就是在CRF标注出了数据库中的变量名,这样我们对照着看CRF和Raw Data,可以明确知道CRF收集的信息都存放在了数据库的哪个变量。
unique/all CRF对于同一个CRF页面可能在很多访视都需要收集,所以所有页面的CRF是很庞大的,但是这些重复的页面其实只保留一个就可以,所以通常我们用Unique CRF。
做SDTM domains/datasets的流程如下:
首先需要用DM提供的unique blank CRF做一下annotation。关于aCRF也有相应的指导原则可以参考:SDTM aCRF Guideline v1.0。
aCRF主要是依据SDTM IG来进行标注的,每张页面需要标注该页涉及到哪个域,收集的信息将被做进哪个变量。标注后大概类似下图。有了aCRF我们就可以根据aCRF、SDTM IG来写SDTM specs了。
SDTM specs大概类似这样,需要描述各个域的名称、标签、结构、关键变量、排序变量,需要所有变量的标签、类型、长度、来源、核心还有定义等等。这些大部分内容都可以在SDTM IG中找到(中文项目可以参考SDTM IG 3.2中文版)。
当我们被分配到一个domain,先去查找IG中相关章节,IG中的req,exp变量都是需要在spec中呈现的,req变量的要求是变量存在且任何记录都不能有缺值,exp变量的要求是尽量赋值,可以缺失,但该变量必须在SDTM datasets中,要不然P21也是会报warning的。所以我们写spec先把IG中req、exp的变量都放上,对于perm的变量如果有收集,就写进spec,如果未收集,就可以不做这个变量。然后对照aCRF将非SDTM的变量,放进SUPP--里。写Spec的时候也要注意check aCRF是否标注正确,再有经验的人也有犯错的机率。
写完了SDTM specs就可以按照SDTM specs愉快的开始编程啦!SDTM的编程工作相对来说是比较简单的,虽然太多复杂的衍生和计算,但是也会有一些tricky的处理,比如EPOCH的mapping,SV计划外访视的renumber,LB域LBTOX的衍生,如果coding是外部文件形式传输,和raw data mapping需要注意什么等等,后续会视情况出相关文章讨论以上问题哦,另外也欢迎大家私信我good questions!