已ADLB为例,临床意义判定独立列出,未纳入BDS结构:
1.判断给药前和给药后
首先判断是给药前还是给药后,一般通过时间的先后就可以判断,代码如下:
data adlb3;
set adlb2;
format ADT yymmdd10. ADTM e8601dt16.;
ADTMC=catx("T",LBDAT,LBTIM); *分析日期;
ADT=input(LBDAT,yymmdd10.);
if length(ADTMC)>10 then ADTM=input(ADTMC,e8601dt16.);
if .<ADTM<=TR01SDTM or (missing(ADTM) and ADT<=datepart(TR01SDTM)) then flag=1; *给药前;
if ADTM>TR01SDTM>. or (missing(ADTM) and ADT>datepart(TR01SDTM)) then flag1=1; *给药后;
proc sort;
by USUBJID PARAMN flag ADTMC VISITNUM;
run;
LBDAT变量为分析日期的年月日,LBTIM变量为分析日期的小时分钟,TR01SDTM变量为首次用药时间。时间这样处理,是因为有部分分析日期只有年月日缺少小时分钟,所以将它们分开处理并比较,得到更准确的给药前和给药后。如果只有年月日可将条件缩写。
2.取基线标识
*基线标识;
data adlb4;
set adlb3;
by USUBJID PARAMN flag ADTMC VISITNUM;
if last.PARAMN and flag=1 then ABLFL="Y"; *一般取给药前最后一条观测值作为基线;
run;
3.用药后最严重临床意义判定标识
*用药后最严重临床意义判定标识;
proc sql;
create table adlb5 as
select a.*
,b.AVAL as BASE
,c._max
from adlb4 a
left join adlb4(where=(ABLFL="Y")) b
on a.USUBJID=b.USUBJID and a.PARAMN=b.PARAMN
left join (select distinct USUBJID, PARAMN, max(ACLSIGN) as _max
from adlb4(where=(flag1=1)) group by USUBJID, PARAMN) c
on a.USUBJID=c.USUBJID and a.PARAMN=c.PARAMN
order by USUBJID, PARAMN, ADTMC, VISITNUM
;
quit;
取满足基线标识的值作为基线值,并重命名变量为BASE,其中select distinct 用来剔除查询结果中的重复观测。
4.计算较基线变化值
data adlb6;
set adlb5;
if cmiss(AVAL,BASE)=0 then do;
if flag1=1 or ABLFL="Y" then CHG=AVAL-BASE;end;
if flag1=1 and ACLSIGN=_max>. then WORSTFL="Y";
run;
已ADEG为例,临床意义判定被纳入BDS结构,PARAMN=6:
3.用药后最严重临床意义判定标识
proc sql;
create table adeg4 as
select a.*
, a1.AVAL as BASE
, _max
from adeg3 a
left join adeg3(where=(ABLFL="Y")) a1
on a.USUBJID=a1.USUBJID and a.PARAMN=a1.PARAMN
left join (select distinct USUBJID, PARAMN, max(AVAL) as _max
from adeg3(where=(flag1=1 and PARAMN=6)) group by USUBJID, PARAMN) b
on a.USUBJID=b.USUBJID and a.PARAMN=b.PARAMN
order by USUBJID, PARAMN, ADTMC
;
quit;
data adeg5;
set adeg4;
if flag1=1 or ABLFL="Y" then CHG=AVAL-BASE;
if PARAMN=6 and flag1=1 and AVAL=_max>. then WORSTFL="Y";
if PARAMN=6 then call missing(BASE,CHG);
run;
最后操作当PARAMN=6时,置空基线值和较基线变化值。
已ADPE为例,临床意义判定直接作为AVAL值,无较基线变化值:
3.用药后最严重临床意义判定标识
proc sql;
create table adpe3 as
select a.*
,b._max
from adpe2(where=(not missing(AVALC))) a
left join (select distinct USUBJID, PARAMN, max(AVAL) as _max
from adpe2(where=(flag1=1)) group by USUBJID, PARAMN) b
on a.USUBJID=b.USUBJID and a.PARAMN=b.PARAMN
order by USUBJID, PARAMN, ADTMC
;
quit;
data adpe4;
set adpe3;
if flag1=1 and AVAL=_max>. then WORSTFL='Y';
run;