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

如何用rtables/tern生成按SOC/PT分组的风险人年及发病率表格?

实现按SOC/PT汇总AE并包含风险人年及发生率的表格方法

核心逻辑

要生成目标表格,核心是将AE事件数据与受试者风险时间数据做关联整合:既要统计每个系统器官分类(SOC)/首选术语(PT)下的不良事件(AE)发生情况,也要计算对应分析人群的总风险人年,最终推导每100人年的AE发生率(发生率=AE发生数/总风险人年×100)。

具体实现步骤

1. 准备基础数据集

  • 整理AE数据集:包含受试者ID、SOC名称、PT名称、AE发生标识(如1表示发生该PT的AE,0表示未发生),注意同一受试者同一PT下多次发生AE需提前去重,仅保留1条记录。
  • 整理风险时间数据集:包含所有受试者ID、对应的风险人年(由入组日期至试验结束/失访日期换算为年单位的累计时间)。

2. 补全AE与风险时间的关联记录

由于未发生某PT AE的受试者也需要计入风险人年统计,需生成所有受试者与SOC/PT的全组合记录:

  • 对有AE的受试者:直接关联其风险人年到对应SOC/PT行
  • 对无AE的受试者:为每个SOC/PT生成虚拟记录(AE发生标识设为0),并关联其风险人年

注:SAS环境下可通过PROC SQL的CROSS JOIN生成受试者与SOC/PT的全组合,再与原AE数据左关联补全发生标识,最后合并风险时间数据。

3. 按SOC/PT分组汇总指标

按SOC和PT分组,计算三个核心指标:

  • ae_count:该SOC/PT下的AE发生例数(统计AE发生标识为1的记录数)
  • total_person_years:分析集中所有受试者的风险人年总和
  • rate_per_100_py:(ae_count / total_person_years) × 100(保留2-3位小数)

4. 格式化输出TLG表格

按照临床试验表格规范整理结构:

  • 第一列:SOC名称,下级PT名称缩进显示
  • 第二列:AE发生例数(n)
  • 第三列:总风险人年
  • 第四列:每100人年发生率

SAS环境简化代码示例

/* 生成所有受试者与SOC/PT的全组合 */
proc sql;
  create table ae_pt_all as
  select distinct a.usubjid, b.soc_name, b.pt_name, 0 as ae_flag
  from risk_time a cross join (select distinct soc_name, pt_name from ae_data) b;
quit;

/* 关联原AE数据,更新发生标识并合并风险时间 */
proc sql;
  create table ae_pt_combined as
  select 
    a.usubjid, a.soc_name, a.pt_name,
    case when b.usubjid is not null then 1 else 0 end as ae_flag,
    c.person_years
  from ae_pt_all a
  left join ae_data b on a.usubjid = b.usubjid and a.soc_name = b.soc_name and a.pt_name = b.pt_name
  left join risk_time c on a.usubjid = c.usubjid;
quit;

/* 按SOC/PT汇总计算核心指标 */
proc sql;
  create table ae_summary as
  select 
    soc_name,
    pt_name,
    sum(ae_flag) as ae_count,
    sum(person_years) as total_person_years format=8.2,
    (calculated ae_count / calculated total_person_years) * 100 as rate_per_100_py format=8.2
  from ae_pt_combined
  group by soc_name, pt_name
  order by soc_name, pt_name;
quit;

/* 生成符合TLG规范的表格 */
proc report data=ae_summary nowindows headline headskip;
  columns soc_name pt_name ae_count total_person_years rate_per_100_py;
  define soc_name / group '系统器官分类(SOC)';
  define pt_name / group '首选术语(PT)' indent=2;
  define ae_count / display 'AE发生例数(n)';
  define total_person_years / display '总风险人年';
  define rate_per_100_py / display '每100人年发生率';
run;

关键注意事项

  • 风险人年计算需精准:要根据受试者入组、退出/失访、试验结束的具体日期换算,避免遗漏提前终止的受试者
  • AE例数去重:同一受试者同一PT下的多次AE仅统计为1例,需在预处理阶段完成去重
  • 分层分析适配:若需按治疗组分层,需在分组时加入治疗组变量,确保每组风险人年对应各自治疗人群的总和

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 03:05:11