vincent829 发表于 2009-7-2 18:02 
又是panel data,有id,year, mv(market value)三个变量,分别代表公司号,年份,市场价值
先gsort year -mv,然后对每一年应用egen c=cut(mv), group(10),也就是对每一年的市场价值分成10组,每组的公司数量相同
但是这个命令不能和by一起用,我就像到了用egen c=cut(mv) if year==#, group(10),对每一年都用一次上述命令
可是显示出错,所以想问问大家有解决方法吗?
出错是由于当你egen循环第二次时,变量c已经存在。当然你可以规避这一问题:
forv i = 1/# {
egen c= cut(mv) if year == `i', group(10)
replace gr = c if year == `i'
drop c
}
由于你要求每组公司的数量相同(当然当公司数不能被10整除时,允许组10公司数量不同,比如公司数为119时,组1-9每组11家公司,而组10将有20家公司),试试:
sort year mv // “组1的mv最小,组10的mv最大”更直观;同时由于公司mv分布显著正偏,当公司数不能被10整除时,让第10组(规模最大组)有更多公司可能是更好的选择,所以有意不用sort year -mv
by year: gen g = _n/_N // 此命令本意是用来规避 egen cut()不能byable的问题
egen gr = cut(g), group(10) // 你要的egen cut()!
replace gr = gr + 1 // 由于egen cut() 由0开始编号
drop g
此方法应该会比sungmoo用cumul的方法效率高些。