我正在计算个人的预期终身收入。我需要使用的公式如下:
E [寿命] = S + S / [(1 + r1)] + S / [(1 + r1)(1 + r2)] + .... + S / [(1 + r1).. (1个+ RN)]
这里,r1 ... rn是个人活着的每年的利率,S是个人的收入。我的问题是我有一个数据集,其中包含每个人的S和他们的死亡年份。现在,使用这两个数字,我需要计算所有个体的E [生命期]。当然,我有所有年份的r。我如何在Stata中计算出来?
问题在于公式中r的数量取决于个人的生活年数,并且使事情变得更复杂,每个人的生活都会变得更加复杂。是不同的!我有一个庞大的数据集,所以我不能机械地为每个人计算这个数据集。请帮忙!
我尝试了for循环,但问题是公式中的术语数量对于每个人都不同。
编辑:我的数据集看起来像这样:
ID Base Year Income Death Year
---------------------------------------
1 1975 1000 2008
2 1978 2423 2005
3 1980 1982 2010
4 1975 1093 2002
5 1976 4382 1999
6 1981 5492 2005
7 1978 1743 1995
我还有一个" r"从1970年到2010年的所有年份。现在,我需要为第一个人执行的计算是:
E [life] = 1000 + 1000 /(1 + r1976)+ 1000 /(1 + r1976)(1 + r1977)+
... + 1000 /(1 + r1976)(1 + r1977)......(1 + r2008)
答案 0 :(得分:3)
这是一种方法,假设每年的利率都在一个单独的文件中。主要技巧是
这是Stata代码:
/* Create a dataset of interest rates */
clear
set obs 36
gen year= 1974 +_n
set seed 1234
gen r=uniform()/10
tempfile interest_rates
save `interest_rates'
/* Fake Income data */
clear
input id base_year income death_year
1 1975 1000 2008
2 1978 2423 2005
3 1980 1982 2010
4 1975 1093 2002
5 1976 4382 1999
6 1981 5492 2005
7 1978 1743 1995
8 2008 59 2010
end
rename base_year year0
rename death_year year1
reshape long year, i(id income) j(time)
drop time
xtset id year
tsfill
capture ssc install carryforward
bysort id: carryforward income, replace
merge m:1 year using `interest_rates', keep(match) nogen
bysort id (year): replace r=0 if _n==1 // don't discount at t=1
bysort id (year): gen dfactor = sum(ln(1/(1+r)))
bysort id (year): replace dfactor = exp(dfactor)
gen double disc_income = income * dfactor
collapse (sum) exp_income = disc_income, by(id)
例如,obs 8(我添加)从2008年到2010年的收入为59,所以应该是
. di 59 + 59/(1+.0084592)+59/((1+.0084592)*(1+.0834539))
171.50379