You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将重复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:合并两个数据集

现在直接按firmdate2做左合并,就能把年度数据的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

火山引擎 最新活动