黃河泉 发表于 2017-3-6 17:26 
Nick Cox 建议
黄老师您好!
请帮忙解决循环只执行一次,不能向下执行的问题。谢谢您!到第二个g,drop后的 (g==`t') 就不能变化执行了。试了,不是drop不满足条件中断。
请问这个命令因为什么问题,g=1执行之后就不能执行了呢?g=2更改为符合条件的也不能执行?谢谢
解决的问题:同一公司年度有多个s0701a==1或s0701a==2的seperation值,保留唯一seperation值。
第一步,s0701a==1,seperation不缺失,删除s0701a=2的所有行观测值;然后取s0701a==1,seperation的均值,保留一个seperation值。
第二步,s0701a==1,seperation缺失,删除s0701a==1的所有行观测值;然后取s0701a==2,seperation的均值,保留一个seperation值。
数据如下:
不完整的循环命令,不能执行一次后不能执行:
egen g=group(codeyear ) // g分组
sum g
bys codeyear: egen seperation0=mean(seperation) if s0701a==2
gen seperation1=.
cap label variable year "年度"
cap label variable codeyear "代码年度,唯一标识"
cap label variable seperation "两权分离率(%)_没有单位"
cap label variable s0701a "1=年报中公布,2=根据股权控制链计算所得"
cap label variable r_tag " codeyear 重复次数"
dataex
forvalues t=1/7 {
set trace on
if (g==`t') & (s0701a==1) & (seperation!=. ){
drop if (g==`t') & (s0701a==2)
}