【CDISC】SDTM中--DY变量的计算

3 篇文章 3 订阅
2 篇文章 1 订阅

做SDTM算AEDY, LBDY, MHDY等等--DY变量时,可参考以下一看就明白的方法。

计算方法:

If --DTC>=SDTM.DM.RFSTDTC then --DY=(date portion of --DTC) - (date portion of DM.RFSTDTC) + 1;

           else --DY=(date portion of --DTC) - (date portion of DM.RFSTDTC)

Notes: --DTC can be used as --DTC, --STDTC, --ENDTC, "--" indicates domain

 

---------以下是参考SAS代码--------------------------------

*domain: sdtm的域名
indsn: 要处理的数据集
indtc:要处理的数据集中的dtc变量
prefix:st或en或空
outdsn:已加上计算好的--dy的数据集;

%macro sdtm_dy(domain=,indtc=, indsn=, prefix=, outdsn=);
/*取sdtm.dm中的rfstdtc和rfendtc,算出其数值型,便于后面加减。*/
    data dm;
        set sdtm.dm;
        format rfstdt rfendt e8601da10.;
        if length(rfstdtc)>=10 then rfstdt=input(substr(rfstdtc,1,10),e8601da10.);
        if length(rfendtc)>=10 then rfendt=input(substr(rfendtc,1,10),e8601da10.);
        keep usubjid rfstdt rfendt;
    run;

/*为和dm merge,对要处理的数据集按usubjid排序。*/
    proc sort data=&indsn.;
        by usubjid;
    run;

/*合并dm和要处理的数据集,得到有xxdy变量的数据集*/
    data &outdsn.;
        length &domain.&prefix.dy &prefix.dt 8.;
        merge dm(in=b) &indsn.(in=a);
        by usubjid;
        if a & b;
        /*合并同时在dm和要处理的数据集中的usubjid的观测*/
        if &indtc.='' then &indtc.='';
        format &prefix.dt e8601da10.;
        if length(&indtc.)>=10 then do;
            &prefix.dt=input(substr(&indtc.,1,10),??yymmdd10.);
        /*算出--dtc变量的数值型:&prefix.dt*/
            if nmiss(rfstdt,&prefix.dt)=0 then &domain.&prefix.dy=&prefix.dt-rfstdt+(&prefix.dt>=rfstdt);
        /*当rfstdtc的数值型rfstdt和--dtc变量的数值型无缺失时,计算--dy变量*/
        end;
        drop rfstdt rfendt;
    run;
%mend sdtm_dy;

----- code end----------------------
 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值