最近在写一个肿瘤项目的SDTM,不仅涉及到编程,还有SPEC的编写,谈谈写DM domain需要注意的地方。
DM数据集就这些变量,比较难,处理起来比较麻烦的就是我红框里圈起来的东西。
像一些人口统计学的信息,比如年龄,生日,种族,民族等,这些直接读取raw.dm(DM部门那边设计的表单名称一般是DM)就好了,因为长度的原因,可能还需要rename一下。
data dm;
set raw.dm(rename=(sex=sex_));
age=age;
sex=sex_;
......
run;
RFSTDTC,RFENDTC,RFXSTDTC,RFXENDTC:
我做过的大多数项目都是直接设置成给药的最早时间和最晚的时间,但是也有例外,像肿瘤项目,一般都是研究药物加上其他已经上市的肿瘤药物,那么这时候RFSTDTC,RFENDTC取得只是研究药物的最早、最晚给药日期。RFXSTDTC,RFXENDTC这时候取得是研究药物+联合用药的最早、最晚给药日期。
RFPENDTC:参与结束日期/时间
这个日期处理起来很麻烦,因为要把所有数据集set起来取受试者参与研究的最大的日期。(也不一定是所有数据集,像既往病史、既往用药就没必要参与了)。
说它处理起来麻烦是因为一个肿瘤项目,至少几十个raw数据集,各个数据集日期的命名又不一样,这时候你就得用公司的宏或者自己写一个,把不一样的日期都转换成同一个日期,然后取最大的日期。
比如这样做:
data dataset1;
set raw.eg(rename=(egdat=rfpendt));
keep usubjid rfpendt;
run;
data dataset1;
set raw.vs(rename=(vsdat=rfpendt));
keep usubjid rfpendt;
run;
然后其他数据集也这样处理,最后都set在一起,取最大的日期,你可以先排序然后通过if last.usubjid取到最大日期,也可以通过proc sql,min(rfpendt) as mindat,max(rfpendt) as maxdat,这个过程很繁琐,也得细心,同时还得思考哪些数据集不能参与这个过程。
比如说肿瘤评估日期不能参与,我觉得肿瘤评估日期真的很不受待见,因为RS domain虽然是记录肿瘤评估相关的数据集,但是RSDTC取得却是肿瘤扫描的日期。我不知道是不是因为肿瘤用CT或者X射线扫描后,不是立马就进行评估,可能因为某些原因,隔几天才进行评估,这时候的评估日期就不能准确地反映肿瘤的进展情况了。
还有一些治疗结束或者研究结束数据集中记录状态为死亡或者失访时的日期。同时还有专门记录访视周期的数据集,可能叫SV,也可能叫VIS,这里面数据的日期也是不能用的(可能还得具体情况具体分析),为什么?
像肿瘤项目,一般治疗结束后,还会设置安全性随访,生存随访什么的,我就看到记录访视周期的数据集,明明患者已经在某个随访周期死亡了,但是后面还进行了一次生存随访,这时候的生存随访日期肯定大于死亡日期的,但是他也被记录在数据集中,这时候你取最大的日期,可这属于RFPENDTC吗?
大家再写这个的时候一定要注意,可以在处理时间的时候,把这个日期来自哪个raw数据集记录下来,方便溯源。
ARM,ARMCD,ACTARM,ACTARMCD:
这个看我那篇链接文章。如果方案只是简单的设置几个组别,然后给药剂量都是固定的,那么ARM,ARMCD,ACTARM,ACTARMCD很好写;
但是如果试验设计是一下吃这个药,一下吃哪个药,然后各个周期吃药的剂量还不一样,这时候ARM,ARMCD,ACTARM,ACTARMCD,和TA,TE中的ELEMENT就不好设置了,这里我也不好举什么例子,以后看看吧。
处理好这些变量,DM差不多就写完了,说它简单也简单,难也挺难的,还是要多写,然后看看有没有什么快捷方法