这篇文章介绍SDTM中SV数据集编程的思路。
SV 是关于受试者访视时间的表,综合了所有分散在其它包含访视变量(VISITNUM,VISIT,VISITDY)的域中的信息。一般来讲,SV数据集的生成,是需要对受试者每一个访视涉及到的所有时间记录进行排序和筛选处理的,最早的时间作为该访视的开始时间,最晚的时间作为该访视的结束时间。
输入信息
具体到SV的编程,我们需要两个方面的信息:
- 包含访视信息(时间窗)的原始数据集;
- 时间窗对应各访视的查询表。
原始数据集
用于生成SV的原始数据集,必须包含具体的访视信息以及对应的时间信息。通常,我们称这个“访视信息”为时间窗,在原始数据集中,一般是FOLDER这一类变量。时间窗的内容一般是简写,例如,“SCR”,“W1”,“W2”……
在整理原始数据集时,有一个难点。在复杂的试验中,包含时间信息的数据集比较多,整理的过程中可能会有遗漏,特别是在人工一个一个查看的情况下。这里分享一个小技巧,时间变量的名称一般都是比较规律的,比如包含DT两个字母。我们可以先把含有这两个字母变量的原始数据集汇总在一起,然后再进行人工筛选。可以参考以下代码:
proc sql noprint;
create table dt as
select memname, name
from dictionary.columns
where libname = "RAW" and index(name, "DT");
quit;
利用SAS字典(dictionary.columns),筛选出包含DT变量的原始数据集,然后人工核查筛选结果。这里“DT”只是举例,不同公司、不同项目,时间变量的特征可能不同,具体情况具体分析。
时间窗对应各访视的查询表
在原始数据集汇总后,我们会对时间窗信息进行处理。在简单的临床试验中,时间窗信息与具体的访视是一一对应的;在复杂试验中,可能出现多个时间窗对应单个访视的情况。
根据查询表,我们将时间窗信息转化为具体访视,对每个受试者的每个访视的时间变量进行排序,选出最早和最晚的时间作为SVSTDTC、SVENDTC的值。有的公司有专门的宏进行处理;若要手动编程,用Data步排序处理或者SQL都可以实现,个人觉得SQL比较方便快捷一点(使用Max, Min汇总函数)。
最后谈一点,一般SDTM数据集中的时间变量都要求是ISO8601格式,而原始数据集中的收集的时间变量可能是其他格式,需要提前处理好。
data test;
dt_raw = "21 FEB 2021";
svdtc = put(input(compress(dt_raw),date9.),e8601da.);
run;
若有疑问,欢迎评论区留言讨论。