我的团队和我正在尝试在我们拥有的年度数据集上使用Stata。我们需要每月制作这些数据并填补空白。
data1 data2 data3 data4
year1 year1 year1 year1
year2 year2 year2 year2
等等
我知道有类似的问题,但是我无法找到每年到每月处理的内容。
答案 0 :(得分:0)
正如已经评论的那样,这个问题在几个关键细节和论坛标准之下是模糊的,没有提供可以使用或显示任何代码尝试的数据示例!
以下示例指出了一些需要做出的决定,而不是(不能)是一个完整的教程。
作为沙盒,我们使用Grunfeld数据并仅保留第一个面板。这给了我们20年的观察。将此方法扩展到多个面板数据并不困难。
webuse grunfeld, clear
keep if company == 1
我们将把年度值分配到7月份。其他选择显然是可能的。因此,我们需要插入其他11个月的值。获取月度数据的一种方法是添加11个观察值,填充具有1到6个月和8到12个月值的值。
gen month = 7
set obs 31
replace month = _n - 20 in 21/26
replace month = _n - 19 in 27/31
我们可以使用fillin
获得所有(月,年)组合,除了比我们想要的更多。在某些观察中,set obs
命令的副作用在year
上缺少值。
fillin month year
drop if missing(year)
现在我们需要一个月度日期变量。
gen mdate = ym(year, month)
format mdate %tm
现在进行插值,有几种方法可以做到。一个具有各种方法的命令是mipolate
,必须先从SSC安装才能使用它。我们任意选择pchip
。此处未显示图表,但应将其视为必不可少的检查,以确保您获得了明智的结果。一个小但可能有用的细节是用开放符号绘制插值,用加号实际绘制使得明显哪个是哪个。
* the command below need only be issued once
ssc inst mipolate
mipolate mvalue mdate, gen(mvalue2) pchip
scatter mvalue2 mvalue mdate, ms(Oh +)
在其他问题(可能是大多数)中,每月数据集和年度数据集在插值之前merge
。在月度日期变量上插值仍然至关重要。如果你想要一个获取值的命令,查看年度日期变量,然后在月度日期变量上进行插值,你可以拥有它,但你需要自己编写它!
每个感兴趣的结果都需要单独插值。
虽然这应该是显而易见的,但请注意,这里没有任何内容可以推动季节性周期,无论是平均周期还是个别年份。似乎最想要这种情况的经济学家通常不会介意或期望,但要小心。
类似地,插值通常最好这样做:变换(例如对数) - 插值 - 反变换。因此,例如,当变化基本上是乘法而不是加法时,这将是一个好主意。
(统计上,当使用确定性规则合成某些变量的11/12数据时,许多人可能对样本大小或自由度感到不安。)
这是所有面板的扩展:
webuse grunfeld, clear
gen month = 7
* general recipe: add 11 observations
set obs 211
replace month = _n - 200 in 201/206
replace month = _n - 199 in 207/211
fillin company month year
drop if missing(company, year)
gen mdate = ym(year, month)
format mdate %tm
mipolate mvalue mdate, gen(mvalue2) pchip by(company)
scatter mvalue2 mvalue mdate, ms(Oh +) by(company)