今天我们继续讲讲如何编写RS,在TU,TR,RS3个中,TR条目最多,QC起来最麻烦,TU和RS相对来说最简单。
在IG3.2中,TU,TR,RS是放在同一个模块下进行演示说明的,且只针对肿瘤。但是在ig3.3的时候,RS域被赋予了更多的职能,包括一些临床诊断也可以放在RS
This domain is for clinical classifications, including oncology disease response criteria. A clinical classification defines data to be collected, but may or may not do so by means of a standard CRF.
Clinical Classifications are named measures whose output is an ordinal or categorical score that serves as a surrogate for, or ranking of, disease status, symptoms, or other physiological or biological status.
但是我们今天只介绍RS在肿瘤方面的应用:
病灶经过评估后,
①:靶病灶会有一个评估结果:RSTEST="Target Response";
②:非靶病灶也会有一个评估结果:RSTEST="Non-target Response";
③:然后还会判断是否有新病灶的生成:RSTEST="New Lesion Indicator";其实对于新病灶,CT上还有几个值,但是我做的项目,大多数还只是判断一下是否有新病灶,除了IRC数据可能会多些新病灶是否有进展那些。
image.png④:最后由研究者得出一个总的评估结果,也就是总体评估:RSTEST=“Overall Response”;这是一个最基本的肿瘤评估过程。
最麻烦的主要还是淋巴瘤,做的检测非常多,还会对肝脏、脾脏进行测量和评估,还有什么5PS评分、PET检查,花样繁多,处理起来也非常麻烦,写程序的时候,光是数据集就有好几个,然后写aCRF的时候,也不知道赋予检测项什么TEST-TESTCD.。
这边的建议就是先看下CT,有没有对应的检测项,然后拿过来用;没有的话再参考下其他项目有没有收集同样的东西;最后的话再自己新建CT,毕竟是可拓展的。
然后主要是理解按照方案规定的的时间,比如说6周,进行一次肿瘤评估,那么就会这次访视产生对应的评估结果;然后下一个6周再进行一次肿瘤评估,又会有这个访视对应的评估结果;其中总体评估结果就用于我们衍生ADRS,ADTTE那些。当然也有可能受试者好几次访视都没来进行肿瘤评估,这个在衍生至时间时间的时候都会有所考量。
RS domain里面的变量这次也是抽重点讲一下:
RSCAT:一般放的是评估的标准,比如RECIST 1.1、Lugano 2014......
RSEVAL/RSEVALID/RSACPTFL:对于IRC的数据,可能会有多个独立评估人,这时候RSEVALID就用来区分不同的独立评估人(IRC数据一般会直接给你标明了),跟TU,TR一样,RSACPTFL用来标明最终是采用哪个人的结果(当然,对于RSACPTFL不等于Y的数据,我们也会做到RS里面,只是后面做分析数据集的时候,衍生其他值,只采用RSACPTFL=“Y”的数据)
RSDTC:评估日期。对于这个访视对应的评估日期(包括靶病灶,非靶病灶,新病灶),有的公司可能是在SDTM的时候就derive,有的公司是在ADaM进行处理,如果是在SDTM处理的时候,记得aCRF写的时候就不是RSDTC了,至于是NOT submitted还是放在SUPPRS,你们自己看着办。
为什么我们要去衍生RSDTC,原因还是在一开始的那篇文章里面,主要是出于保守原则,然后我们在RS中处理的时候,记得对于靶病灶评估的结果,去衍生RSDTC的时候,只取靶病灶当前访视(或者对应访视,也就是第六周评估的结果只取第六周的影像学扫描日期,不可能去取第12周的)的Scan date;按照是否PD取最早最晚的日期。同理非靶病灶、新病灶也是也是。然后总体评估结果的RSDTC就取当前访视靶病灶、非靶病灶、新病灶的影像学扫描日期,也是按照是否PD取最早最晚的影像学扫描日期。
image.png image.pngTRLNKGRP--RSLNKGRP用来展示病灶测量结果和病灶评估结果的对应关系
data rs_all;
set rs ;
RSCAT='RECIST 1.1';
RSEVAL='研究者';
if RSOVALYN='是' then do;
RSTESTCD='TRGRESP';
RSTEST='靶向评估';
RSORRES=RSTRE;
output;
RSTESTCD='NTRGRESP';
RSTEST='非靶向反应';
RSORRES=RSTRNE;
output;
RSTESTCD='NEWLIND';
RSTEST='新病灶指示';
RSORRES=RSNEWYN;
output;
RSTESTCD='OVRLRESP';
RSTEST='总体评估';
RSORRES=RSOVAL;
output;
end;
else if RSOVALYN='否' then do;
RSTESTCD='RSALL';
RSTEST='肿瘤评估结果';
RSSTAT='未查';
RSREASND=strip(RSOVALNR);
output;
end;
run;
说到程序,第一大家养成写代码注意排版的习惯,不要一坨挤在那,注意代码空间不会占你家空间的;第二该加注释的加注释。
然后写finding类数据集的时候,大家对于检测项,第一种处理方式是用proc transpose;把检测项从横向结构转换成纵向结构,但是对于未查的数据,我们一般是输出一个XXALL就可以,转置的话可能还是会输出多余的XXTESTCD,到后面要去下重。
第二种方式就是像程序里面的写法一样,用output,这个可以避免上面未查的情况,但是也会有一个不好的地方就是如果某个变量的值只针对其中的另一个变量,output的时候每个TESTCD都会有这个变量的值,然后做SUPP数据集的时候就会多出很多不相关的记录,所以我们得提前将不属于这个变量的值置空,才不会出现这种情况。
目前常用的方法就上面两种,大家可以都尝试一下。
对于RS,常规的做法就是上面所述,但是肿瘤数据的处理真的不是一成不变的,原始数据也会千奇百怪,比如说有的评估数据根本不会有访视,只有一个日期;然后评估数据里面的评估结果可能有些不属于肿瘤评估的结果,而是桥接治疗的疗效结果数据....
我觉得重要的是还是理解整个评估流程,在脑海里有这个意识,写起来就不会那么痛苦了。
大家对于这3个domain还有什么疑问可以留言或者有不同的看法都可以说出来,接下来我就会进入到肿瘤数据分析数据集的分享。
网友评论