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

如何将20余种分析物从SAS宽表转置为SDTM LB域长表?

实现SDTM LB域数据集的合并与转置方法

方法一:使用SAS实现

核心步骤

  • 合并多份结构一致的实验室原始数据集
  • 将宽表转置为长表,提取分析物名称并映射至LBTEST,结果值映射至LBORRES
  • 匹配同一分析物的测试名称与结果值,生成符合SDTM规范的LB域结构

代码示例

/* 1. 合并多份实验室数据集 */
data lab_combined;
    set lab_dataset1 lab_dataset2 lab_dataset3; /* 替换为实际数据集名称 */
    keep STUDYID COUNTRY SITE SUBJID LBTST_: LBRES_:; /* 保留标识符及所有分析物相关变量 */
run;

/* 2. 转置宽表为长表 */
proc transpose data=lab_combined out=lb_long(rename=(_name_=var_name)) prefix=value;
    by STUDYID COUNTRY SITE SUBJID;
    var LBTST_: LBRES_:;
run;

/* 3. 拆分变量名,区分测试名称与结果值 */
data lb_temp;
    set lb_long;
    lab_name = scan(var_name, 2, '_'); /* 提取下划线后的分析物标识 */
    if index(var_name, 'LBTST_') then LBTEST = value;
    else if index(var_name, 'LBRES_') then LBORRES = value;
run;

/* 4. 合并同一分析物的测试名称与结果 */
proc sort data=lb_temp;
    by STUDYID COUNTRY SITE SUBJID lab_name;
run;

data sdtm_lb;
    merge lb_temp(where=(LBTEST is not missing)) lb_temp(where=(LBORRES is not missing));
    by STUDYID COUNTRY SITE SUBJID lab_name;
    keep STUDYID COUNTRY SITE SUBJID LBTEST LBORRES;
    /* 可补充LBDTC、LBORRESU等SDTM必填变量,根据原始数据调整 */
run;

方法二:使用Python(Pandas)实现

核心步骤

  • 加载并合并多份实验室数据集
  • 利用melt函数转置宽表,拆分变量名提取分析物信息
  • 通过透视表匹配测试名称与结果值,整理为SDTM LB域结构

代码示例

import pandas as pd

# 1. 加载并合并多份实验室数据集
lab_files = ['lab_dataset1.csv', 'lab_dataset2.csv', 'lab_dataset3.csv']
lab_combined = pd.concat([pd.read_csv(f) for f in lab_files], ignore_index=True)

# 2. 筛选目标变量
id_vars = ['STUDYID', 'COUNTRY', 'SITE', 'SUBJID']
value_vars = [col for col in lab_combined.columns if col.startswith(('LBTST_', 'LBRES_'))]

# 3. 转置为长表
lb_long = lab_combined.melt(id_vars=id_vars, value_vars=value_vars, var_name='var_name', value_name='value')

# 4. 拆分变量名,提取类型与分析物名称
lb_long[['var_type', 'lab_name']] = lb_long['var_name'].str.split('_', expand=True)

# 5. 透视匹配测试名称与结果值
sdtm_lb = lb_long.pivot_table(
    index=id_vars + ['lab_name'],
    columns='var_type',
    values='value',
    aggfunc='first'
).reset_index()

# 6. 整理最终结构
sdtm_lb.rename(columns={'LBTST': 'LBTEST', 'LBRES': 'LBORRES'}, inplace=True)
sdtm_lb = sdtm_lb[id_vars + ['LBTEST', 'LBORRES']]

# 保存结果
sdtm_lb.to_csv('sdtm_lb.csv', index=False)

注意事项

  • 需根据原始数据的变量命名规则调整拆分逻辑(如变量名无下划线时,需改用其他字符串处理方式)
  • 需补充SDTM LB域的必填变量(如LBDTC、LBORRESU等),可从原始数据中提取或生成

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:45:23