绅秘人 2025-09-11 22:22 采纳率: 0%
浏览 6

CHARLS共病研究相关代码

怎么用stata筛选出患2种或以上疾病的人群?怎么将多个年份的数据进行合并?

  • 写回答

5条回答 默认 最新

  • 檀越@新空间 2025-09-11 22:23
    关注

    晚上好🌙🌙🌙
    本答案参考通义千问

    在使用 CHARLS(中国健康与养老追踪调查)数据进行共病研究时,常会遇到两个核心问题:

    1. 如何用 Stata 筛选出患有 2 种或以上疾病的人群?
    2. 如何将多个年份的数据合并?

    下面我将详细解答这两个问题,并提供相应的 Stata 代码示例


    一、筛选出患 2 种或以上疾病的人群

    1.1 数据结构说明

    假设你的数据中包含多个疾病变量(如 hypertensiondiabetesheart_disease 等),每个变量为 0/1 型(0 表示无该疾病,1 表示有该疾病)。

    1.2 解决方案

    步骤一:计算每人的疾病总数

    egen total_diseases = rowtotal(hypertension diabetes heart_disease ...)
    

    注意:hypertension diabetes heart_disease ... 替换为实际的疾病变量名。

    步骤二:筛选出总疾病数 ≥ 2 的人

    keep if total_diseases >= 2
    

    重点: rowtotal() 函数用于对行内所有变量求和,适用于 0/1 变量。

    步骤三(可选):生成共病标识变量

    gen comorbid = (total_diseases >= 2)
    

    这个变量可以用于后续分析,如描述性统计或回归模型。


    二、合并多个年份的数据

    2.1 数据准备

    假设你有多个年份的 CHARLS 数据文件,例如:

    • charls_2011.dta
    • charls_2013.dta
    • charls_2015.dta
    • charls_2017.dta

    这些文件中都有相同的个体 ID(如 pidid)以及相同或相似的变量。

    2.2 合并方法

    方法一:使用 append 合并不同年份的数据(纵向合并)

    use charls_2011.dta, clear
    append using charls_2013.dta
    append using charls_2015.dta
    append using charls_2017.dta
    

    重点: append 是纵向合并,适用于不同年份的同一组个体数据。

    方法二:使用 merge 合并多份数据(横向合并)

    如果不同年份的数据是按变量分开的(如不同年份的变量名略有差异),可以使用 merge。但更常见的是使用 append


    三、完整代码示例(整合)

    * 加载第一个年份的数据
    use charls_2011.dta, clear
    
    * 计算每位个体的疾病总数
    egen total_diseases = rowtotal(hypertension diabetes heart_disease stroke)
    
    * 筛选出患 2 种及以上疾病的个体
    keep if total_diseases >= 2
    
    * 保存当前数据
    save filtered_data_2011.dta, replace
    
    * 合并其他年份的数据
    append using charls_2013.dta
    append using charls_2015.dta
    append using charls_2017.dta
    
    * 再次计算疾病总数
    egen total_diseases = rowtotal(hypertension diabetes heart_disease stroke)
    
    * 筛选共病人群
    keep if total_diseases >= 2
    
    * 保存最终结果
    save combined_comorbid_data.dta, replace
    

    四、注意事项

    1. 变量名称一致性:确保各年份数据中的疾病变量名称一致,否则需先进行重命名。
    2. 缺失值处理:如果某些疾病变量存在缺失值,建议使用 rowtotal(..., missing) 来保留缺失值参与计算。
    3. 个体唯一性:确保 pidid 变量是唯一的,以避免重复记录。
    4. 数据清洗:在合并前建议对每一年份数据进行清洗,如删除无效记录、处理异常值等。

    五、总结

    要实现以下目标:

    1. 筛选共病人群

      • 使用 rowtotal() 计算疾病数量
      • 使用 keep if total_diseases >= 2
    2. 合并多个年份数据

      • 使用 append 实现纵向合并
      • 确保变量名一致、数据格式统一

    如果你能提供具体的疾病变量名或数据结构,我可以进一步为你定制代码。希望这对你有所帮助!

    评论

报告相同问题?

问题事件

  • 创建了问题 9月11日