最近一个项目的方案更新,新增了眼科检查(Ophthalmic Examination)的内容。对应的,CRF增加了相关Form,我们也做了对应的Mapping。这篇文章记录一下,Mapping和编程的过程。
1. Form的内容
CRF Form记录的Topic信息,有3个:
- Best corrected visual acuity (最佳矫正视力)
- Intraocular Pressure (眼内压)
- Overall slit-lamp result (整体裂隙灯结果)
对于第三项检查内容,可能有读者跟我一样,第一眼无法直观理解,这里附上百科的解释:
新增的OE Form有三类,Screening、On-study、Unscheduled。Screening、Unscheduled收集了完整的3个Topic信息,On-study只收集了Overall slit-lamp result。
对于这样的Form结构,第一次Mapping时考虑不全面,数据集PassQC后,Review数据时发现了问题。这个问题后面编程部分介绍。
2. CRF Mapping
对于Findings的Domain,CRF Mapping的处理主要为2部分,主题变量TEST/CD 和 结果变量ORRES/STRESC/N的Mapping。
Mapping主要原则是,尽可能取CDISC 标准术语。CDISC CT一般一个季度更新一个版本,一般项目开始时,CDSIC CT的版本会确定好,除非特定情况,整个项目的CT Mapping只会会使用改版本。在CDISC官网中找到下载链接。
最后的下载页面如下,Index of /ftp1/CDISC/SDTM (nih.gov)。
OE Domain是在SDTM IG v3.3才正式Release出来,具体的CT取值可以先参考IG上的CT名称,然后去CDISC CT文件中搜索:
经过查看只有,Intraocular Pressure和Overall slit-lamp result有对应的CT值(IOP, INTP);对于Best corrected visual acuity,没有标准CT值,就自行确定取值,例如(VASACUTY)。
结合CRF Review数据发现,这个Form的3类结果虽然Mapping比较简单,但比较有代表性。
- Best corrected visual acuity的结果为固定格式的字符,类似“20/25”,直接赋值结果;
- Intraocular Pressure的结果为数值,直接赋值结果,需要处理单位变量;
- Overall slit-lamp result 为标准的Interpretation的结果。
这里仅展示一下第3项的具体Mapping描述:
- If 'Normal', then OEORRES = 'NORMAL'.
- If 'Abnormal Not Clinically Significant' then OEORRES = 'ABNORMAL'.
- If 'Abnormal Clinically Significant', OEORRES = 'ABNORMAL'.
- If 'Other', OEORRES = verbatim text from Specify Result.
SUPP变量的OECLSIG以及其他变量,这里就不再介绍。
3. SAS编程
这个Form整体不复杂,只有一个原始数据集,根据不同的Form来源进行生成变量。
关于SDTM Mapping的建议,对于多来源的Domain,尽量以来源进行分类处理变量。通常我们的SDTM_SPEC 是以Variable-level进行构建的,很多人下意识地在编程中按顺序一个变量一个变量的编程。在这种情况下,如果多个来源且来源的数据Mapping有区别,编程会变得混乱。不如从Form-level入手来得简洁。
说一下这个Form Mapping遇到的问题,刚开始没关注某Form只有一个检测结果。同时,只有一个原始数据集,检测结果变量横向排列,无结果的记录都为空值。我们无差别地通过Output语句新建记录,这就导致来自那个Form的记录有很多“Not Done”的结果。QC完毕后,Review输出数据集,太多“Not Done”结果是不合理的。于是重新Mapping,那个Form只输出一个TESTCD的记录。
总结
这篇文章记录项目中OE的Mapping和编程,过程没什么难度。希望对读者有所启发。
感谢阅读, 欢迎关注!
若有疑问,欢迎评论交流!