楼主: Yvonnehh3
5634 8

[编程问题求助] 有关stata循环语句的编写问题 [推广有奖]

  • 0关注
  • 0粉丝

大专生

46%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
34.7118
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
293 点
帖子
14
精华
0
在线时间
90 小时
注册时间
2018-3-8
最后登录
2021-5-6

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
求助各位大神两个关于循环语句的问题:
(1)像下面这样的依次递增变量个数的累加,能否用循环语句实现呢?
egen f_2000 = rowtotal(rela_2000)
egen f_2001 = rowtotal(rela_2000 rela_2001)
egen f_2002 = rowtotal(rela_2000 rela_2001 rela_2002)
egen f_2003 = rowtotal(rela_2000 rela_2001 rela_2002 rela_2003)
egen f_2004 = rowtotal(rela_2000 rela_2001 rela_2002 rela_2003 rela_2004)

...

(2)像下面这个例子:每个allrela_20xx.dta里面有关于其前一年变量,需要统一改名称:
use allrela_2001.dta
rename rela_2000 rela_qian
save allrela_2001,replace

use allrela_2002.dta
rename rela_2001 rela_qian
save allrela_2002,replace

use allrela_2003.dta
rename rela_2002 rela_qian
save allrela_2003,replace
...

我的代码是:
forvalues i=2001/2013{
  use allrela_`i'.dta
  rename rela_`i-1' rela_qian
  save allrela_`i',replace
}
但是结果出不来,想问问`i-1'这个用法是不是错的?加入j=i-1似乎也不可行

二维码

扫码加我 拉你入群

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

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

关键词:Stata 循环语句 tata forvalues forvalue

回帖推荐

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

沙发
Yvonnehh3 发表于 2018-4-29 20:21:09 |只看作者 |坛友微信交流群
上传问题(1)的实验样本:
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input float(rela_2000 rela_2001 rela_2002 rela_2003 rela_2004 rela_2005 rela_2006 rela_2007 rela_2008 rela_2009 rela_2010 rela_2011 rela_2012 rela_2013 No)
  4. 0 0 0 1 1 1 1 1 1 1 1 1 1 1  1
  5. 1 2 3 4 4 4 4 4 4 4 4 4 4 4  2
  6. 1 1 1 1 1 1 1 1 1 1 1 1 1 1  3
  7. 0 0 1 2 2 2 2 2 2 2 2 2 2 2  4
  8. 1 1 1 1 1 1 1 1 1 1 1 1 1 1  5
  9. 1 1 1 2 2 2 2 2 2 2 2 2 2 2  6
  10. 1 1 1 2 2 2 2 2 2 2 2 2 2 2  7
  11. 0 1 2 3 3 3 3 3 3 3 3 3 3 3  8
  12. 1 1 2 3 3 3 3 3 3 3 3 3 3 3  9
  13. 1 2 2 2 2 2 2 2 2 2 2 2 2 2 10
  14. 1 2 3 4 4 4 4 4 4 4 4 4 4 4 11
  15. 1 2 3 4 4 4 4 4 4 4 4 4 4 4 12
  16. 0 0 1 2 2 2 2 2 2 2 2 2 2 2 13
  17. 0 0 1 1 1 1 1 1 1 1 1 1 1 1 14
  18. 1 2 3 4 4 4 4 4 4 4 4 4 4 4 15
  19. 1 1 2 2 2 2 2 2 2 2 2 2 2 2 16
  20. 0 1 2 3 3 3 3 3 3 3 3 3 3 3 17
  21. 1 2 3 4 4 4 4 4 4 4 4 4 4 4 18
  22. 0 0 0 1 1 1 1 1 1 1 1 1 1 1 19
  23. 0 1 2 2 2 2 2 2 2 2 2 2 2 2 20
  24. end
复制代码

使用道具

藤椅
a76594734 发表于 2018-4-29 20:32:15 |只看作者 |坛友微信交流群
你试试
forvalues i=2001/2013{
preserve
  use allrela_`i'.dta
  rename rela_`i-1' rela_qian
  save allrela_`i',replace
restore
}

使用道具

板凳
Yvonnehh3 发表于 2018-4-29 21:12:18 |只看作者 |坛友微信交流群
a76594734 发表于 2018-4-29 20:32
你试试
forvalues i=2001/2013{
preserve
还是不行诶,stata是直接将`i-1'识别成`i'去处理的

使用道具

报纸
Yvonnehh3 发表于 2018-4-29 21:19:40 |只看作者 |坛友微信交流群
问题(2)的实验数据(自动生成3个dta文件):
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. //allrela_2001文件:
  4. input str6 num float(rela_2000 rela_2001)
  5. "1" 1 2
  6. "1" . .
  7. end
  8. save allrela_2001.dta
  9. //allrela_2002文件:
  10. clear
  11. input str6 num float(rela_2001 rela_2002)
  12. "1" 2 3
  13. "1" . .
  14. end
  15. save allrela_2002.dta
  16. //allrela_2003文件:
  17. clear
  18. input str6 num float(rela_2002 rela_2003)
  19. "1" 3 4
  20. "1" . .
  21. end
  22. save allrela_2003.dta
复制代码

使用道具

地板
蓝色 发表于 2018-4-29 21:49:36 |只看作者 |坛友微信交流群
  1. forvalues i=2001/2003{
  2.   use allrela_`i'.dta,clear
  3.   local j=`i'-1
  4.   rename rela_`j' rela_qian
  5.   save allrela_`i',replace
  6. }
复制代码


使用道具

7
Yvonnehh3 发表于 2018-4-30 11:26:28 |只看作者 |坛友微信交流群
蓝色 发表于 2018-4-29 21:49
就是这个效果!谢谢大神指点!!!

使用道具

8
Yvonnehh3 发表于 2018-4-30 11:27:09 |只看作者 |坛友微信交流群
蓝色 发表于 2018-4-29 21:49
另外想问一下:问题(1)是没办法用循环语句实现吗?

使用道具

a76594734 发表于 2018-4-29 20:32
你试试
forvalues i=2001/2013{
preserve
rename rela_`j=`i'-1' rela_qian

使用道具

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

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

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

GMT+8, 2024-11-5 18:42