楼主: 005964113
2301 3

[数据管理求助] 计算权益资本成本的代码问题 [推广有奖]

  • 2关注
  • 3粉丝

已卖:5份资源

博士生

1%

还不是VIP/贵宾

-

威望
0
论坛币
6839 个
通用积分
12.7092
学术水平
7 点
热心指数
7 点
信用等级
3 点
经验
17578 点
帖子
159
精华
0
在线时间
239 小时
注册时间
2015-11-1
最后登录
2025-8-1

楼主
005964113 发表于 2020-8-20 16:32:17 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
如果以一年期定期存款利率作为折现率,会遇到的问题是从数据库中下载的利率是分段的,如图所示p1,Cdate为利率调整的日期,interest为调整后的利率



公式p2中,t指当年第i次一年期存款利率变动后的利率存续的时间长短(以天计算),r指当年第i次一年期存款利率变动后的利率,n指当年一年期存款利率变动的次数。



求助一段简洁代码,生成如图p3的数据格式。

附件为原始数据
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:权益资本 资本成本 一年期存款利率 存款利率 定期存款

p3.png (5.16 KB)

想要的结果

想要的结果

p2.png (1.35 KB)

公示

公示

p1.png (15.92 KB)

p1.png

interest.dta
下载链接: https://bbs.pinggu.org/a-3289821.html

3.65 KB

沙发
DΘstinyじò 发表于 2020-8-20 18:36:31
有两个疑问:
没有年份数的数据怎么办?像2000、2001、2016-2019这类数据没有的怎么给最后结果,像2003、2013处于中间没有数据的是按照上一年度的最后一个利率算,还是按上一年度的re(你的计算公式)算?
若一个年度,存在分段情况,最后一个的ti怎么计算,时间跨度是到下一个年度的第一个数据还是到该自然年度年末?

藤椅
005964113 发表于 2020-8-20 20:14:40
DΘstinyじò 发表于 2020-8-20 18:36
有两个疑问:
没有年份数的数据怎么办?像2000、2001、2016-2019这类数据没有的怎么给最后结果,像2003、2 ...
原始数据是利率变化的时间点,如果2003没有,说明没有变化,值等于上次变化之后的利率,也就是上一年度最后一次变化后的利率,但如果上年度多次变动利率,则不等于上年度的利率值。


第二个疑问:应当是到自然年度结束,不延续到下一年。

板凳
DΘstinyじò 发表于 2020-8-21 14:08:31
005964113 发表于 2020-8-20 20:14
原始数据是利率变化的时间点,如果2003没有,说明没有变化,值等于上次变化之后的利率,也就是上一年度最 ...
个人理解,数据Cdate为利率调整的日期,interest为调整后的利率,您的数据第一个是21feb2002——1.98,因而2000——2002年最后是不知道的,从2003年开始可以通过公式计算。公式应该算是一个加权平均,权重为该利率实行的时长比上该自然年度的天数,某一年度没有变化(没有数据)应该等于前一个调整利息,实际该年度以前一个调整利息持续了一个自然年度。因为存在闰年的情况,个人觉得除以365不太严谨,可以分年份计算。(下面代码有体现)
计算方法上来说,第一:先构造了2000——2019的年份和年初和年末的Cdate变量;第二:将构造的辅助数据与interest数据merge,对year、Cdate排序,因为interest为调整后的利率,因为对于interest现有的空值来说,赋值前一个调整的利率;第三:计算权重,分子上就是该利率持续的时长,分母为该自然年度的天数,特别之处在于年末这一天,需要单独列出;第四:加权求和。
如果解释不清楚,分步实现代码,可能更好理解。
  1. clear
  2. set obs 40
  3. egen year=seq(), f(2000) t(2019) b(2)
  4. bys year: gen     Cdate=date(string(year)+"-01-01","YMD")  if _n==1
  5. bys year: replace Cdate=date(string(year)+"-12-31","YMD")  if _n==2
  6. format %td Cdate

  7. //interest.dta数据在工作目录下可以直接运行,不在的话需要引用数据的绝对路径
  8. qui merge 1:1 year Cdate using interest.dta,nogen
  9. sort year Cdate
  10. replace interest=interest[_n-1] if interest==.

  11. bys year: gen     W=(Cdate[_n+1]-Cdate)  /(Cdate[_N]-Cdate[1]+1) if _n!=_N & year>2002
  12. bys year: replace W=(1)/(Cdate[_N]-Cdate[1]+1)                   if _n==_N & year>2002

  13. bys year:egen wanted=sum(interest*W)  if year>2002
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Sunknownay + 3 + 3 + 3 热心帮助其他会员

总评分: 学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-11 01:51