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

如何在R中复现SAS生成的按年龄性别分组的患病率表格?

解决方案:用gt_summary复现流行病学患病率表格

问题分析

你的原代码逻辑有误:把Age_interval当成了待统计的变量,而非分组依据;未针对Confirmatory_results(患病结果)设置正确的统计规则,也没添加总体患病率列。以下是修正后的代码及说明:

步骤1:预处理数据(确保患病结果为二分类)

先确认Confirmatory_results是二分类变量(比如"阳性"/"阴性"或1/0),如果是字符型,先转成因子:

df_linked6 <- df_linked6 %>%
  mutate(
    Confirmatory_results = factor(Confirmatory_results, 
                                  levels = c("Negative", "Positive"),  # 按实际取值调整
                                  labels = c("未患病", "患病"))  # 可选:设置更友好的标签
  )

步骤2:生成目标患病率表格

# 按年龄组、性别计算查加斯病患病率
df_linked6 %>%
  select(Age_interval, Sex, Confirmatory_results) %>%
  group_by(Age_interval) %>%  # 以10年年龄组为行分组
  tbl_summary(
    by = Sex,  # 按性别拆分列
    include = Confirmatory_results,  # 仅统计患病结果
    label = list(Confirmatory_results ~ "患病率"),
    # 统计规则:每个单元格显示「患病数/组总人数(百分比)」
    statistic = list(all_categorical() ~ "{n}/{N} ({p}%)"),
    percent = "cell",  # 百分比基于当前年龄-性别组的总人数
    missing = "no"  # 不展示缺失值(按需调整)
  ) %>%
  add_overall(col_label = "总体") %>%  # 添加总体患病率列
  modify_header(label = "年龄组(岁)") %>%  # 把默认label表头改为「年龄组(岁)」
  modify_spanning_header(all_stat_cols() ~ "性别") %>%  # 添加跨列表头「性别」
  bold_labels()  # 加粗行标签(年龄组)

关键修正点

  • 用group_by(Age_interval)指定行分组依据,而非把年龄组作为统计变量
  • 针对Confirmatory_results设置统计规则,确保计算的是每组内的患病比例
  • 添加add_overall()生成总体患病率列
  • 用percent = "cell"确保百分比基于每个年龄-性别组的总人数(符合患病率定义)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 05:32:43