vincent829 发表于 2009-7-7 11:31
我用了比较低级的命令解决分组的问题。
*两组任务合并一处(sheet1的mv的缺失值被替换后,再按sheet2替换
相应的group缺失值,如果某一mv值对应多个group值,只取最小的group值):
tempfile d
use sheet2,clear
keep year mv group
g g=1
save `d'
*去掉无available值替代的缺失值
use sheet1,clear
sort id year month
by id: g s=sum(mv)
by id: egen n=sum(mv)
drop if s==n&mv==.
drop s n
*替换有available值替代的缺失值
sort id year month
loc n=_N
forv i=1/`n'{
egen n=count(mv)
if n==_N {
continue,break
}
by id: replace mv=mv[_n+1] if mv==.&mv[_n+1]<.
drop n
}
drop n
*按sheet2替换group的缺失值
g g=1 if group==.
append using `d'
sort g year mv id month group
by g year: g x=(group[_n]+1==group[_n+1]&group<.) if g==1
by g year: g y=sum(x)-x+1 if g==1
replace group=y if g==1&group==.
drop if id==.
drop x y g
sort id year month