全部版块 我的主页
论坛 计量经济学与统计论坛 五区 数据交流中心
7225 0
2025-08-05

Stata 里把工具变量 IV × 年份虚拟变量变成一组随时间变化的工具变量,只需三步即可:生成年份虚拟 循环或 forvalues 批量交互 2SLS 里一次性调用。下面给出完整模板,可直接复制使用。





场景示例

截面 IV:城市地形起伏度 terrain(不随时间变)

面板数据city-year 维度

目标:为地形 × 年份交互项生成 2000-2020 21 个工具变量





生成年份虚拟变量

stata


tab year, gen(dyear)     // 自动生成 dyear1, dyear2, …





批量生成交互工具变量(两种写法)


写法 A:循环生成(最直观)

stata


// 假设年份范围 2000-2020forvalues y = 2000/2020 {

    gen iv_`y' = terrain * (year == `y')}


写法 B:一行到位(因子变量交互)

stata


// 生成 dyear#c.terrain 交互组,变量名形如 c.terrain#2000.yearfvset base none year* 下面用因子变量写法即可,无需手动批量 gen





2SLS / GMM 中调用

传统 ivreg2

stata


ivreg2 y controls (x = iv_2000-iv_2020), cluster(city)


因子变量写法(更简洁)

stata


ivreg2 y controls (x = c.terrain#i.year), cluster(city)

解释:Stata 会把 c.terrain#i.year 自动展开成 terrain×year 21 个交互项,并全部视为工具变量。





检查工具变量个数 & 过度识别

stata


estat firststage   // 查看第一阶段 F estat overid       // Hansen J 检验





一行总结

tab year, gen(dyear) 生成年份哑元,再用 gen iv_y' = IV * dyearc.IV#i.year即可批量得到 **随时间变化的工具变量**,随后直接喂给ivreg2/xtivreg2`,无需额外循环。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群