面板数据下计算受孕至出生期间平均烟雾暴露量的方法问询
问题分析与实现方案
错误原因说明
你之前的代码无法得到正确结果有两个核心原因:
inrange()函数参数不符合要求,该函数标准语法为inrange(校验变量, 最小值, 最大值),你传入的参数数量错误,且逻辑上没有关联到妊娠全周期的日期范围- 当前数据集每行仅包含新生儿出生当日的烟雾暴露值,没有覆盖受孕到出生之间所有日期的暴露数据,无法直接计算周期均值
实现步骤(基于Stata)
步骤1:日期格式标准化
首先将字符串格式的日期转为Stata内部可计算的日期格式:
* 原数据日期格式为日/月/年,使用DMY参数转换 gen dt_birth_stata = date(dt_birth, "DMY") gen dt_conception_stata = date(dt_conception, "DMY") * 设为可读日期展示格式 format dt_birth_stata dt_conception_stata %td
步骤2:准备每日烟雾暴露基准数据集
你需要提前准备一份覆盖所有妊娠时段的全局每日烟雾暴露数据集(命名为smoke_daily.dta),结构如下:
| 日期变量 | 当日烟雾暴露量 |
|---|---|
| date | smoke |
步骤3:扩展样本观测到妊娠全周期
将每个新生儿的单条观测,扩展为和妊娠天数一致的多条观测,每条对应妊娠期间的一天:
* 按妊娠天数扩展行数 expand days_gestation * 生成妊娠周期内的逐日日期 bysort dt_birth_stata dt_conception_stata: gen preg_date = dt_conception_stata + _n - 1 format preg_date %td
步骤4:匹配每日烟雾暴露值
将扩展后的样本数据集和每日烟雾基准数据集匹配,关联得到妊娠期间每一天的烟雾暴露值:
* 匹配前将smoke_daily.dta的日期变量名改为preg_date,和样本数据集对齐 merge m:1 preg_date using "smoke_daily.dta", keep(match master) keepusing(smoke) nogen
步骤5:计算妊娠周期平均暴露量
按新生儿维度分组计算均值,之后可缩回单条/新生儿的结构:
* 若有唯一新生儿id,优先使用id作为分组变量 bysort dt_birth_stata dt_conception_stata: egen mean_smoke_preg = mean(smoke) * 保留每个新生儿的单条结果 bysort dt_birth_stata dt_conception_stata: keep if _n == 1
内容的提问来源于stack exchange,提问作者acarr
相关产品推荐
相关产品推荐

