楼主: 日复一日12
3405 8

[编程问题求助] stata可以两个loop一起用吗? [推广有奖]

  • 0关注
  • 1粉丝

已卖:133份资源

讲师

17%

还不是VIP/贵宾

-

威望
0
论坛币
1151 个
通用积分
43.6279
学术水平
10 点
热心指数
18 点
信用等级
11 点
经验
11224 点
帖子
155
精华
0
在线时间
685 小时
注册时间
2012-3-26
最后登录
2025-1-23

楼主
日复一日12 发表于 2014-5-3 20:55:41 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
在用到数据处理的时候需要两个loop一起用,也就是一个大的loop里面包着一个小的loop,不知道stata可以实现吗?做了一下发现语法错误什么的,请教下各位大神:
我的是这样:
capture program drop x
program x
forvalues i = 1 (1) 6 {
xxxx
xxxx
xxxx
forvalues j = 1 (1) 8{
XXX
XXX
}
}
end
x
这样对不对?

二维码

扫码加我 拉你入群

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

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

关键词:Stata loop tata forvalues forvalue

回帖推荐

╰不滅信念 发表于4楼  查看完整内容

这样的程序肯定是没错的,至于为什么语法错误,要把代码贴出来才能分析出来 运行结果:

沙发
数着星星玩 发表于 2014-5-3 21:08:26 来自手机
暂时帮不到你,抱歉

藤椅
日复一日12 发表于 2014-5-3 21:12:08
数着星星玩 发表于 2014-5-3 21:08
暂时帮不到你,抱歉
恩 谢谢

板凳
╰不滅信念 学生认证  发表于 2014-5-3 21:21:46
这样的程序肯定是没错的,至于为什么语法错误,要把代码贴出来才能分析出来
  1. capture program drop x
  2. program x
  3.         forvalues i = 1(1)6 {
  4.                 dis 1
  5.                 forvalues j = 1(1)8{
  6.                         dis 2
  7.                 }
  8.         }
  9. end

  10. fun
复制代码
运行结果:
output.jpg
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
an你若成风 + 1 + 1 + 1 精彩帖子
日复一日12 + 1 + 1 + 1 观点有启发

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

where there is a will there is a way

报纸
日复一日12 发表于 2014-5-3 21:27:21
╰不滅信念 发表于 2014-5-3 21:21
这样的程序肯定是没错的,至于为什么语法错误,要把代码贴出来才能分析出来
运行结果:
capture program drop x

program x

forvalue i = 2 (i) 6 {

use "e:\match.dta",clear

sort Stkcd Trddt

bys Stkcd: gen datenum=_n

by Stkcd: gen target_1=datenum if i_n==`i'

egen td = min (target_1),by(Stkcd)

drop target_1

*find the interval day
gen dif=datenum-td

*choose the length of the event window
by Stkcd: gen event_window=1 if dif>=0 & dif <=21

forvalues j = 2(1)36{

by Stkcd: replace event_window=`j' if dif>=(`j'-1)*21+(`j'-1) & dif <=`j'*21+(`j'-1)
}

*caculate the length of the window for every company
egen count_event_obs=count(event_window),by(Stkcd)

sort Stkcd event_window

keep if  event_window !=.

keep if  count_event_obs==792

count if i_m==1

sort Stkcd Trddt

*2.3 caculate the buy and hold stock return
sort Stkcd event_window Trddt

by Stkcd event_window: gen return_stock=(Clsprc[_N]-Clsprc[1])/Clsprc[1]

by Stkcd event_window: gen return_stock1=return_stock+1

sort Stkcd event_window Trddt

by Stkcd event_window: gen return_stock2=return_stock1 if i_m ==1

by Stkcd event_window: replace return_stock2=1 if return_stock2==.

egen R1=prod(return_stock2),by(Stkcd)

keep if i_n==`i'

egen r1_sum = sum(R1)

saveold "E:\1992_nonipo_`i'",replace

}
end

x


程序是这样的,子LOOP是用来生成窗口的,母的LOOP是用来选择股票的,分别是2 ,3, 4 到6

地板
日复一日12 发表于 2014-5-3 21:27:52
╰不滅信念 发表于 2014-5-3 21:21
这样的程序肯定是没错的,至于为什么语法错误,要把代码贴出来才能分析出来
运行结果:
先谢过!~~

7
日复一日12 发表于 2014-5-3 21:43:36
╰不滅信念 发表于 2014-5-3 21:21
这样的程序肯定是没错的,至于为什么语法错误,要把代码贴出来才能分析出来
运行结果:
发现问题了,是第一个forvalues 前面的括号1 写成了i ....
现在开始工作了
不知道结果怎么样。。

不过我一直觉得我生成窗口的过程超级麻烦。。stata是不是比较不适合做事件研究呀?

8
╰不滅信念 学生认证  发表于 2014-5-3 21:55:12
不是专业的窗口设计程序当然在这块比较吃紧。。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
an你若成风 + 1 + 1 + 1 精彩帖子

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

where there is a will there is a way

9
日复一日12 发表于 2014-5-3 21:56:29
╰不滅信念 发表于 2014-5-3 21:55
不是专业的窗口设计程序当然在这块比较吃紧。。
一般是用什么比较好呢 SAS?

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

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