楼主: 于果
3640 9

[编程问题求助] 编程forvalues循环问题求助,内外循环,年份i循环上加不了,循环中断 [推广有奖]

  • 0关注
  • 0粉丝

讲师

27%

还不是VIP/贵宾

-

威望
0
论坛币
445 个
通用积分
8.9076
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
9627 点
帖子
214
精华
0
在线时间
400 小时
注册时间
2016-9-12
最后登录
2023-7-11

楼主
于果 发表于 2018-6-14 19:08:01 |AI写论文
100论坛币
在做环境不确定性的回归时,是要对满足YEAR为1 ~5的代码进行回归,并且展开循环,分为内外两个循环。但是当内部循环遇到不满足条件的reg的时候就会自动终止,提示no observation,或者insufficient observation.猜测由此终止了循环,更不用提外部的年份叠加的循环了,论坛中有老师指出可以用levelsof,但不知具体如何处理,是不是需要加一个内循环,进行continue或者break.附上数据和代码。谢谢各位!
bysort stkcd:egen n=count( year)
drop if n<5
encode(stkcd),gen(id)
xtset id year
egen idnew = group(id)
sum idnew
local N = r(max)
gen msale=.
gen dev=.
forvalues i = 2000(1)2011{
forvalues j = 1/876{
gen YEAR= year-`i'
qui reg sale YEAR if YEAR>0& YEAR<6 & idnew==`j'
qui predict p if YEAR<6 & YEAR>0& idnew==`j',r
qui sum p if idnew==`j',de
qui dis "i=`i' j=`j'"
qui replace dev=r(sd) if idnew==`j' & YEAR==5
qui sum sale if idnew==`j' & YEAR<6 & YEAR>0 ,de
qui replace  msale=r(mean) if idnew==`j' & YEAR==5
drop p YEAR
}
}

微信图片_20180605231234.png 微信图片_20180605230145.png 微信图片_20180605230109.png 2001-2016中小板创业板sale.xls (531.5 KB, 需要: 5000 个论坛币)

2001-2016中小板创业板sale.dta (144.25 KB, 需要: 5000 个论坛币)







最佳答案

关键词:环境不确定性 环境不确定 如何处理 内部循环 两个循环 forvalues 循环 编程数据问题

回帖推荐

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

cap drop p cap drop YEAR 拆成2行应该就没有问题

沙发
蓝色(未真实交易用户) 发表于 2018-6-14 19:08:02
  1. bysort stkcd:egen n=count( year)
  2. drop if n<5
  3. encode(stkcd),gen(id)

  4. xtset id year
  5. egen idnew = group(id)
  6. sum  idnew
  7. local N = r(max)
  8. gen msale=.
  9. gen dev=.


  10. forvalues i = 2000(1)2011{
  11. forvalues j = 1/876{
  12. cap drop p YEAR
  13. gen YEAR= year-`i'
  14. cap qui reg sale YEAR if YEAR>0& YEAR<6 & idnew==`j'
  15. cap qui predict p     if YEAR<6 & YEAR>0& idnew==`j',r
  16. cap qui sum p if idnew==`j',de
  17. cap qui dis "i=`i' j=`j'"
  18. cap qui replace dev=r(sd) if idnew==`j' & YEAR==5
  19. cap qui sum sale if idnew==`j' & YEAR<6 & YEAR>0 ,de
  20. cap qui replace  msale=r(mean) if idnew==`j' & YEAR==5
  21. cap drop p YEAR
  22. }
  23. }
复制代码


藤椅
于果(未真实交易用户) 发表于 2018-6-14 19:09:53
在reg前加capture noisily也试过,但是在YEAR为6时也就直接终止了,循环进行不下去。请教各位!

板凳
黃河泉(未真实交易用户) 在职认证  发表于 2018-6-15 07:44:27
于果 发表于 2018-6-14 19:09
在reg前加capture noisily也试过,但是在YEAR为6时也就直接终止了,循环进行不下去。请教各位!
1. 你若要问程序,永远附上资料;若要附上资料,永远用 dataex 印出资料;先 ssc install dataex (并见说明),将原始 Stata 资料中具有”代表性”的一部分资料列出,以供有意回答者实验之用,并能提供具体操作指令。并请参考 http://www.jianshu.com/p/9870080fe769,  https://bbs.pinggu.org/thread-5048204-1-1.html, 与 https://bbs.pinggu.org/thread-5917273-1-1.html。2. 類似這種情況,用 loop 基本上都是不好的作法,總是有其他更簡潔與迅速之作法!

报纸
于果(未真实交易用户) 发表于 2018-6-15 12:00:34
蓝色 发表于 2018-6-15 10:34
非常感谢您的回复!谢谢!刚刚按照您的程序运行了一下,出现 variable YEAR already defined 的提示,但是命令中已有在代码前进行cap drop YEAR p的步骤,不知为何仍然会出现YEAR已经存在的错误提示,还麻烦您指点~谢谢!

地板
于果(未真实交易用户) 发表于 2018-6-15 12:01:41
错误提示

12121.png (11.52 KB)

错误提示

错误提示

7
蓝色(未真实交易用户) 发表于 2018-6-15 12:08:51
  1. bysort stkcd:egen n=count( year)
  2. drop if n<5
  3. encode(stkcd),gen(id)

  4. xtset id year
  5. egen idnew = group(id)
  6. sum  idnew
  7. local N = r(max)
  8. gen msale=.
  9. gen dev=.


  10. forvalues i = 2000(1)2011{
  11. forvalues j = 1/876{
  12. cap drop p
  13. cap drop YEAR
  14. gen YEAR= year-`i'
  15. cap qui reg sale YEAR if YEAR>0& YEAR<6 & idnew==`j'
  16. cap qui predict p     if YEAR<6 & YEAR>0& idnew==`j',r
  17. cap qui sum p if idnew==`j',de
  18. cap qui dis "i=`i' j=`j'"
  19. cap qui replace dev=r(sd) if idnew==`j' & YEAR==5
  20. cap qui sum sale if idnew==`j' & YEAR<6 & YEAR>0 ,de
  21. cap qui replace  msale=r(mean) if idnew==`j' & YEAR==5
  22. cap drop p
  23. cap drop YEAR
  24. }
  25. }
复制代码

8
蓝色(未真实交易用户) 发表于 2018-6-15 12:10:40
cap drop p
cap drop YEAR

拆成2行应该就没有问题

9
于果(未真实交易用户) 发表于 2018-6-15 12:40:09
蓝色 发表于 2018-6-15 12:10
cap drop p
cap drop YEAR
谢谢蓝色大大!感恩~

10
Hannah_Bi(未真实交易用户) 发表于 2021-3-16 02:06:31
谢谢大大!

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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-29 09:52