2. many-to-many merge:
在SDTM中,EX domain是存放exposure信息的,SV domain是放subject visit信息的。大多数时候,我们需要将EX中的dose date定位在哪个visit,因而这是需要和SV merge的。现假设:EX中的数据是每条subject有多条dosing record(exstdtc=2012-08-12T09-45, exstdtc=2013-9...),一条对应一个日期/时间,SV中的数据是每个subject有多个visit(visitnum=1, visit=screening, svstdtc=2013-05-15, svendtc=2013-06-12; visitnum=2, visit=run-in, svstdtc=2013-06-13, svendtc=2013-6-20...)。
通过sql能解决这样的问题。
**** Use Proc SQL for many-to-many merge.;
**** Assign dose date to a specific visit window by comparing to visit start and visit stop date.;
proc sql;
create table exvisit as
select distinct ex.usubjidn, exstdtn, visitnum, svstdtn, svendtn
from ex left join sv
on ex.usubjidn = sv.usubjidn and svstdtn le exstdtn le svendtc
order by ex.usubjidn, exstdtn
;
quit;
tips:
1). 像--STDTC, --ENDTC是标准的CDISC变量,是字符型的,如果要涉及到日期数值的比较,肯定是要先转化为可比较的数值型变量。因为日期时间很多是不完整的,所以可能会用到calculation algorithm,这就看specification中么规定了。
2). EX中总有某个date不落入某个visit,有些computation会define visit window。比如visitnum=2这一天的前后3天都算是visit是等于2的。
3). 由于sql overlap value,所以尽可能只选择一些只要处理变量,这样也不容易出错。
|