楼主: zzz3309
589 4

[编程问题求助] 求助stata forvalue循环!!! [推广有奖]

  • 0关注
  • 0粉丝

高中生

65%

还不是VIP/贵宾

-

威望
0
论坛币
849 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
88 点
帖子
10
精华
0
在线时间
55 小时
注册时间
2022-5-15
最后登录
2024-12-21

楼主
zzz3309 发表于 2023-8-12 22:29:02 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
各位老师好,我想要通过∑sa* 0.08*(1.08^(i-22)) * 1.053^(59-i)的式子来计算样本个体从第22岁到59岁(即i从22至59)的值,使用forvalue循环来做,但是只能计算出首个样本的值,不知道哪一步写错了。
我的forvalue语句是
gen t1=.
loc p11=0
loc s="sa"
forvalues i=22/24{
loc p11=`p11'+`s' * 0.08*(1.08^(`i'-22)) * 1.053^(59-`i')
replace t1=`p11'
}

出现的结果是这样的,i234是我用22、23、24的数据算出来后相加的值,用来测试i从22-24的t1是否正确,但只有首行的值是一样的,下面的变量都没有变化,希望大佬能够指出问题!非常感谢!
微信截图_20230812222211.png

以下是我的部分数据:
pid        sa        i22        i23        i24        i234        t1
100051502        124321.8        67218.21        68941.76        70709.49        206869.5        206869.5
100160601        195601.8        105757.8        108469.6        111250.8        325478.3        206869.5
103465551        130801.8        70721.81        72535.2        74395.07        217652.1        206869.5
103788501        49419.38        26720.04        27405.17        28107.86        82233.06        206869.5
103924503        156721.8        84736.22        86908.95        89137.38        260782.5        206869.5
106561501        157369.8        85086.58        87268.29        89505.94        261860.8        206869.5
107435501        109543.1        59227.68        60746.34        62303.94        182278        206869.5
108211501        85493.61        46224.62        47409.87        48625.51        142260        206869.5


二维码

扫码加我 拉你入群

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

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

关键词:forvalue 求助stata Stata value alue forvalue

回帖推荐

momingqimiao7 发表于2楼  查看完整内容

因为loc s="sa"每次只能存储了sa的第一行数值 可以对每行数值做个循环 forv r=1/8 { [/backcolor]

沙发
momingqimiao7 在职认证  学生认证  发表于 2023-8-14 09:32:59

因为loc s="sa"每次只能存储了sa的第一行数值
可以对每行数值做个循环 forv r=1/8 {

  1. gen t1=.

  2. forv r=1/8 {
  3.         loc p11=0
  4.         sum sa  if _n==`r'
  5.         loc s= r(mean)
  6.         forvalues i=22/24{
  7.                 loc p11=`p11'+`s' * 0.08*(1.08^(`i'-22)) * 1.053^(59-`i')  
  8.                 replace t1=`p11' if _n==`r'
  9.         }

  10. }
复制代码


常用控制变量 https://bbs.pinggu.org/thread-15164021-1-1.html

藤椅
蓝色 发表于 2023-8-14 10:11:47
  1. reshape long i,i(pid) j(age)
  2. bys pid: egen t1=total(sa * 0.08*(1.08^(age-22)) * 1.053^(59-age))
  3. reshape wide i,i(pid) j(age)
复制代码

板凳
zzz3309 发表于 2023-8-20 14:28:32
momingqimiao7 发表于 2023-8-14 09:32
因为loc s="sa"每次只能存储了sa的第一行数值
可以对每行数值做个循环 forv r=1/8 {
谢谢!

报纸
zzz3309 发表于 2023-8-20 14:29:03
蓝色 发表于 2023-8-14 10:11
谢谢老师!

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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-2-7 23:33