如何将重复12次的年度数据以6个月滞后合并至月度数据?
年度数据滞后6个月合并到月度数据的实现方案
我来帮你搞定这个滞后合并的需求,不管你用Python Pandas还是Stata,都有很直观的实现方式,下面分别给你演示:
使用Python Pandas实现
首先,我们先构造你的示例数据,然后一步步完成合并:
步骤1:构造示例数据
import pandas as pd # 构造年度数据(重复12次) annual_data = pd.DataFrame({ 'firm': [1]*12, 'date1': [2000]*12, 'x': [5]*12 }) # 构造月度数据 monthly_data = pd.DataFrame({ 'firm': [1]*12, 'date2': [200001,200002,200003,200004,200005,200006, 200007,200008,200009,200010,200011,200012], 'y': [3,7,2,8,9,3,6,2,7,2,3,8] })
步骤2:处理年度数据,生成匹配的月度日期
我们需要把年度数据的前6次重复丢弃,保留后6次,然后给它们分别对应到2000年7-12月的date2格式:
# 筛选出年度数据的后6行(对应要映射的7-12月) annual_lagged = annual_data.iloc[6:].reset_index(drop=True) # 生成对应月份:7到12 annual_lagged['month'] = range(7, 13) # 组合成和月度数据一致的date2格式:年份*100+月份 annual_lagged['date2'] = annual_lagged['date1'] * 100 + annual_lagged['month'] # 只保留需要合并的列 annual_lagged = annual_lagged[['firm', 'date2', 'x']]
步骤3:合并两个数据集
现在直接按firm和date2做左合并,就能把年度数据的x值对应到200007-200012的月度数据里:
merged_data = pd.merge(monthly_data, annual_lagged, on=['firm', 'date2'], how='left') print(merged_data)
运行后你会看到,200001-200006的x列是NaN,200007-200012的x列都是5,完全符合你的需求。
使用Stata实现
如果你用Stata处理数据,步骤同样清晰:
步骤1:导入并处理年度数据
* 导入年度数据(假设已经导入,或者用input命令构造) clear input firm date1 x 1 2000 5 1 2000 5 1 2000 5 1 2000 5 1 2000 5 1 2000 5 1 2000 5 1 2000 5 1 2000 5 1 2000 5 1 2000 5 1 2000 5 end * 生成月份变量,对应1-12月 gen month = _n * 筛选出需要映射的7-12月数据 keep if month >=7 * 生成和月度数据一致的date2格式 gen date2 = date1 * 100 + month * 保存为临时文件,方便后续合并 save "annual_lagged.dta", replace
步骤2:导入月度数据并合并
* 导入月度数据 clear input firm date2 y 1 200001 3 1 200002 7 1 200003 2 1 200004 8 1 200005 9 1 200006 3 1 200007 6 1 200008 2 1 200009 7 1 200010 2 1 200011 3 1 200012 8 end * 按firm和date2左合并年度数据 merge m:1 firm date2 using "annual_lagged.dta", keep(master match) nogen
合并后同样会看到,前6个月的x缺失,后6个月的x值为5,完美实现你的滞后映射需求。
内容的提问来源于stack exchange,提问作者user8922408




