请选择 进入手机版 | 继续访问电脑版
楼主: MrOyang
1055 12

[数据管理求助] 怎么用循环语句完成以下命令? [推广有奖]

  • 17关注
  • 6粉丝

博士生

43%

还不是VIP/贵宾

-

威望
0
论坛币
1596 个
通用积分
21.7061
学术水平
5 点
热心指数
8 点
信用等级
6 点
经验
1449 点
帖子
76
精华
0
在线时间
486 小时
注册时间
2014-8-14
最后登录
2024-4-16

MrOyang 发表于 2021-2-23 17:52:44 |显示全部楼层 |坛友微信交流群
200论坛币
想要计算指标pop间隔5年的增长率,并生成新的指标。
手动输入的话,命令如下图。

总觉得可以用循环语句简化计算,但是自己做不出来,求助大神~~
示例数据如下:
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input double(pop2003 pop2004 pop2005 pop2006 pop2007 pop2008 pop2009 pop2010)
  4. 1142.5407816350082 1155.8367963732528 1515.3375583135287 1559.4943230229655 1606.9892103635489  1664.000698091355 1725.0085164367229 1858.4464664287689
  5. 922.5463591135233  929.2868462757529 1033.3398541206718  1059.009304472463 1095.0000006938064 1145.4905990301588 1202.0727458688912 1263.7285256322436
  6. 907.2293916249671  914.0506966593923  956.9921268277006   965.047619047619  973.7751103411293  981.3539397711164  986.3545747337979 1002.8070175438597
  7. 704.4651112198835  708.1645983017636  723.9877169178033  728.3912547411267   735.977492387131  741.0808673575561  744.9772758357919  752.5231945309738
  8. 271.84602416409103 274.53829851650016  286.0637120726807  279.6150924284629 293.00394342048867  294.3670172118919 296.76949465142013 298.40933872105705
  9. 853.5930154466084  860.2002388169376  863.0126771066368  869.1343817926096  873.6989568618928  878.7073418392123  884.7096009482418  903.3240255517728
  10. 665.6318716854223  669.6870719629122  678.0201175181754  681.9279186066562  686.3528278625366  690.8836884387007  696.1192170818506   705.154459247193
  11. 1073.6011144648246 1082.6430172497808 1069.9600798403194 1076.6194150367844 1082.5630953318114  1088.917206226753   1097.02111604312 1111.2134843639913
  12. 450.4364967614756  450.1068736640793  418.0154820548909 418.13471502590676  418.8751479289941 420.43305707949105 422.38795651256066  429.1957187902473
  13. 358.5049580472922  359.9137931034483  336.0067145388417  337.3266078184111  337.9987787751115 339.67122767008743 342.42436255518516  345.9257529768854
  14. end
复制代码








2.png
1.png

最佳答案

songking 查看完整内容

forvalues year=2003/2018{ cap gen poprt`year'`=`year'+5'=(ln(pop`=`year'+5')-ln(pop`year'))*100 } rename poprt20*20* poprt**
关键词:循环语句 generated generate install example

回帖推荐

蓝色 发表于10楼  查看完整内容

也可以这样改

zdlspace 发表于3楼  查看完整内容

已有 2 人评分经验 学术水平 热心指数 信用等级 收起 理由
逐梦的太阳 + 50 + 3 + 5 + 5 鼓励积极发帖讨论
xujingtang + 80 精彩帖子

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

songking 发表于 2021-2-23 17:52:45 |显示全部楼层 |坛友微信交流群
MrOyang 发表于 2021-2-24 09:15
使用循环缺失可以做到。
但是计算出pop增长率之后,还要与另一个变量的同期增长率进行回归,回归次数比较 ...
forvalues year=2003/2018{
cap gen poprt`year'`=`year'+5'=(ln(pop`=`year'+5')-ln(pop`year'))*100
}
rename poprt20*20* poprt**

使用道具

MrOyang 发表于 2021-2-23 20:03:24 |显示全部楼层 |坛友微信交流群
顶顶~~

使用道具

zdlspace 学生认证  发表于 2021-2-23 21:17:15 |显示全部楼层 |坛友微信交流群
  1. reshape long pop,i(id) j(year)
  2. xtset id year
  3. bys id:gen poprt1=(pop-L5.pop)/L5.pop
复制代码

使用道具

MrOyang 发表于 2021-2-23 21:30:32 |显示全部楼层 |坛友微信交流群
zdlspace 发表于 2021-2-23 21:17
谢谢~~
这个方法能达到目标。
不过循环语句能不能做到呢?
因为计算出增长率之后,还要对同期的人口增长率与另一个变量增长率做回归,次数会比较多。循环语句应该怎么写?
感谢感谢!!

使用道具

zdlspace 学生认证  发表于 2021-2-23 22:18:35 |显示全部楼层 |坛友微信交流群
论坛币呢?

使用道具

MrOyang 发表于 2021-2-24 09:15:04 |显示全部楼层 |坛友微信交流群
zdlspace 发表于 2021-2-23 21:17
使用循环缺失可以做到。
但是计算出pop增长率之后,还要与另一个变量的同期增长率进行回归,回归次数比较多。所以还是想知道,用循环语句怎么写?
感谢感谢~~

使用道具

MrOyang 发表于 2021-2-24 11:18:41 |显示全部楼层 |坛友微信交流群
songking 发表于 2021-2-23 17:52
forvalues year=2003/2018{
cap gen poprt`year'`=`year'+5'=(ln(pop`=`year'+5')-ln(pop`year'))*100
...
感谢,已经设置为最佳答案了!
还要麻烦问一下
gen poprt`year'`=`year'+5'=(ln(pop`=`year'+5')-ln(pop`year'))*100
这行命令里,poprt`year'`=`year'+5'中间的等号起的什么作用?为什么可以把两个字符连接起来呢?

使用道具

songking 发表于 2021-2-24 12:43:44 |显示全部楼层 |坛友微信交流群
MrOyang 发表于 2021-2-24 11:18
感谢,已经设置为最佳答案了!
还要麻烦问一下
gen poprt`year'`=`year'+5'=(ln(pop`=`year'+5')-ln(po ...
表示当前年份+5年,不同的宏是可以直接连接的
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
MrOyang + 5 + 1 + 1 + 1 精彩帖子

总评分: 论坛币 + 5  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

蓝色 发表于 2021-2-24 13:17:07 |显示全部楼层 |坛友微信交流群
也可以这样改

  1. forvalues i=2003/2018{
  2.       local j=`i'+4
  3.           
  4.       gen poprt`i'`j'=(ln(pop`j')-ln(pop`i'))*100
  5. }
  6. rename poprt20*20* poprt**
复制代码
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
MrOyang + 5 + 1 + 1 + 1 精彩帖子

总评分: 论坛币 + 5  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

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

本版微信群
加好友,备注jltj
拉您入交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-19 05:08