将面板数据中的年度数据扩展到半年度数据
Expanding annual to semiannual data in panel data
我有一个面板数据集,其中包含 1960 年至 2050 年间 30 个经合组织国家/地区年轻人的比例(变量名为值)。
数据仅以每年一次的频率提供,但我希望以每半年一次的频率提供,因此我想扩展和插入数据。目标是每半年获得每个国家/地区的价值。
我扩展了数据集并分配了重复项 dupe=1 以进行跟踪。然后我生成了一个名为 year_half 的变量,原始值(上半年)为 1,重复值(下半年)为 2。然后我插值。代码是:
expand 2, gen(dupe)
gen year_half = 1 if dupe==0
replace year_half = 2 if dupe==1
bysort year : gen hdate = yh(year, year_half)
by year : replace value = . if dupe==1
ipolate value hdate, gen(linear) epolate
我没有收到任何错误代码,但我也没有得到正确的结果。变量 linear 只有一些观察值的插值(其余缺失),它似乎不对应于 year_half、hdate 或 dupe。有谁知道如何解决这个问题?
这似乎是你所做的事情的本质,除了面板结构需要重复by country:
。
* Example generated by -dataex-. To install: ssc install dataex
clear
input float(year value)
2010 2
2011 4
2012 6
end
expand 2
bysort year : replace value = . if _n == 2
by year : gen halfyear = yh(year, _n)
ipolate value halfyear , gen(value2) epolate
list, sep(0)
+----------------------------------+
| year value halfyear value2 |
|----------------------------------|
1. | 2010 2 100 2 |
2. | 2010 . 101 3 |
3. | 2011 4 102 4 |
4. | 2011 . 103 5 |
5. | 2012 6 104 6 |
6. | 2012 . 105 7 |
+----------------------------------+
但是,你的方法很武断。你把年值当成上半年应用,如果你把它应用到下半年,会得到不同的答案。
这是一个更对称的过程:
clear
input float(year value)
2010 2
2011 4
2012 6
end
expand 2
sort year
gen VALUE = (value[_n-1] + 2 * value + value[_n+1])/4
by year : gen halfyear = yh(year, _n)
ipolate VALUE halfyear, gen(value2) epolate
list, sep(0)
+------------------------------------------+
| year value VALUE halfyear value2 |
|------------------------------------------|
1. | 2010 2 . 100 1.5 |
2. | 2010 2 2.5 101 2.5 |
3. | 2011 4 3.5 102 3.5 |
4. | 2011 4 4.5 103 4.5 |
5. | 2012 6 5.5 104 5.5 |
6. | 2012 6 . 105 6.5 |
+------------------------------------------+
编辑对面板数据的初步概括(未测试)
expand 2
sort country year
by country: gen VALUE = (value[_n-1] + 2 * value + value[_n+1])/4
by country year : gen halfyear = yh(year, _n)
by country: ipolate VALUE halfyear, gen(value2) epolate
我有一个面板数据集,其中包含 1960 年至 2050 年间 30 个经合组织国家/地区年轻人的比例(变量名为值)。
数据仅以每年一次的频率提供,但我希望以每半年一次的频率提供,因此我想扩展和插入数据。目标是每半年获得每个国家/地区的价值。
我扩展了数据集并分配了重复项 dupe=1 以进行跟踪。然后我生成了一个名为 year_half 的变量,原始值(上半年)为 1,重复值(下半年)为 2。然后我插值。代码是:
expand 2, gen(dupe)
gen year_half = 1 if dupe==0
replace year_half = 2 if dupe==1
bysort year : gen hdate = yh(year, year_half)
by year : replace value = . if dupe==1
ipolate value hdate, gen(linear) epolate
我没有收到任何错误代码,但我也没有得到正确的结果。变量 linear 只有一些观察值的插值(其余缺失),它似乎不对应于 year_half、hdate 或 dupe。有谁知道如何解决这个问题?
这似乎是你所做的事情的本质,除了面板结构需要重复by country:
。
* Example generated by -dataex-. To install: ssc install dataex
clear
input float(year value)
2010 2
2011 4
2012 6
end
expand 2
bysort year : replace value = . if _n == 2
by year : gen halfyear = yh(year, _n)
ipolate value halfyear , gen(value2) epolate
list, sep(0)
+----------------------------------+
| year value halfyear value2 |
|----------------------------------|
1. | 2010 2 100 2 |
2. | 2010 . 101 3 |
3. | 2011 4 102 4 |
4. | 2011 . 103 5 |
5. | 2012 6 104 6 |
6. | 2012 . 105 7 |
+----------------------------------+
但是,你的方法很武断。你把年值当成上半年应用,如果你把它应用到下半年,会得到不同的答案。
这是一个更对称的过程:
clear
input float(year value)
2010 2
2011 4
2012 6
end
expand 2
sort year
gen VALUE = (value[_n-1] + 2 * value + value[_n+1])/4
by year : gen halfyear = yh(year, _n)
ipolate VALUE halfyear, gen(value2) epolate
list, sep(0)
+------------------------------------------+
| year value VALUE halfyear value2 |
|------------------------------------------|
1. | 2010 2 . 100 1.5 |
2. | 2010 2 2.5 101 2.5 |
3. | 2011 4 3.5 102 3.5 |
4. | 2011 4 4.5 103 4.5 |
5. | 2012 6 5.5 104 5.5 |
6. | 2012 6 . 105 6.5 |
+------------------------------------------+
编辑对面板数据的初步概括(未测试)
expand 2
sort country year
by country: gen VALUE = (value[_n-1] + 2 * value + value[_n+1])/4
by country year : gen halfyear = yh(year, _n)
by country: ipolate VALUE halfyear, gen(value2) epolate