You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于多记录填充结果变量的SDTM.QS数据集处理最优方法咨询

基于PROC TRANSPOSE实现DLQI7参数的AVAL赋值方案

完全可以通过PROC TRANSPOSE结合COALESCE函数实现需求,同时能高效保证每个受试者每访视仅保留一条DLQI7记录,以下是具体实现步骤和代码:

1. 预处理:筛选目标记录

先从SDTM.QS中筛选出QSTESTCD为DLQI7或DLQI7SCO的记录,减少后续处理的数据量:

data qs_target;
    set sdtm.qs;
    where qtestcd in ('DLQI7', 'DLQI7SCO');
    keep usubjid visitnum qtestcd qsstresn qsorres;
run;

2. 转置DLQI7SCO记录

用PROC TRANSPOSE将同一位受试者同一访视下的DLQI7SCO的QSSTRESN转成列变量,这样每条DLQI7记录可以直接匹配到对应访视的评分值:

proc transpose data=qs_target(where=(qtestcd='DLQI7SCO')) out=dlqi7sco_wide(drop=_name_ _label_);
    by usubjid visitnum;
    id qtestcd;
    var qsstresn;
run;

这里BY语句按受试者和访视分组,ID指定用QSTESTCD作为列名,转置后每个USUBJID+VISITNUM组合仅保留一行,列DLQI7SCO存储对应的评分值。

3. 合并数据并赋值AVAL

将DLQI7的主记录和转置后的DLQI7SCO数据合并,再用COALESCE和条件判断生成AVAL:

data adam.param(where=(paramcd='DLQI7'));
    merge qs_target(where=(qtestcd='DLQI7') rename=(qtestcd=paramcd))
          dlqi7sco_wide;
    by usubjid visitnum;

    * 按规则赋值AVAL;
    aval = coalesce(dlqi7sco, ifc(qsorres='00', 0, .));

    * 保留必要字段,按需调整;
    keep usubjid visitnum paramcd aval qsorres;
run;
  • COALESCE函数优先取非空的DLQI7SCO值(即匹配到的有效评分);
  • 如果DLQI7SCO不存在或为空,则判断原DLQI7记录的QSORRES是否为00,是则赋值0,否则留空(可根据需求调整默认值);
  • WHERE语句确保最终只保留PARAMCD为DLQI7的记录,且通过BY合并自动保证每个USUBJID+VISITNUM仅一条记录。

4. 极端情况处理(可选)

如果存在同一受试者同一访视多条DLQI7记录的极端情况,可通过PROC SORT加NODUPKEY去重:

proc sort data=adam.param nodupkey;
    by usubjid visitnum paramcd;
run;

这个方案的优势是利用PROC TRANSPOSE高效聚合同组数据,结合COALESCE简化条件判断逻辑,代码简洁且性能稳定,适合处理大规模临床试验数据。

内容的提问来源于stack exchange,提问作者smackersz88

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 17:09:32