Stata - 使用累计和计算预期终身价值

时间:2015-03-25 23:21:20

标签: stata

我正在计算个人的预期终身收入。我需要使用的公式如下:

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)

1 个答案:

答案 0 :(得分:3)

这是一种方法,假设每年的利率都在一个单独的文件中。主要技巧是

  1. 将数据重新整形为长格式并填写之间的年份 每个人的基准年和死亡年。
  2. 要获取折扣因子,请计算记录的1 /(1 + rn)项的运行总和,然后对其进行取幂以获得折扣系数的运行产品。
  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