dxystata 发表于 2014-2-3 03:31 
你问题写清楚啊!
forvalues i=1/20000 {
forvalues j=1/15 {
replace A=sum(B*C) if code1==`j' & code2==`i'
}
}
如顶楼说的,这个循环是没问题的,但是数据量太大,速度太慢。
这是一个替代的内嵌循环, 观察数据后发现code2=1的时候,code1只有对应的 1 2 5 15.
也就是说对于i=1,内循环 j不需要走3 4 6 7...14的循环。
但是当i=2时,也就是对应的code2=2时,对应的code1,也就是j 可能对应有4 6 7 8 9。
所以对于i=1/2000所对应的j是不一样的,但是j始终是<=15的正整数,因此foreach是不行的。
我想的优化方法是追加if条件到内循环里,这样就变成了:
forvalues i=1/20000 {
forvalues j=1/15 {
if code1==`j' { //当code1存在等于循环值的时候再进行下面的替换操作//
replace A=sum(B*C) if code1==`j' & code2==`i'
}
}
}
这样对于i=1,如果code1==`j'的时候再走循环,但是这个command运行完j=1就跳到i=2里去执行j=1了。
我不知道怎么能把这个if用好,怎么样才能让内循环一直执行到15,再去算i=2到2000。
表述的不好请谅解啦,较繁琐,还请多多指点,谢谢!