*year与stkcd的各种组合应是唯一的(或者说,它们可以用来定义panel data)。若不是,可用duplicates drop来保证。
*从而只需在两处加上year以确定唯一性即可(另外可以再精简几步):
use match3.dta, clear
bys year ind daq sp (stkcd):g exp=_n if sp
bys year ind daq:egen s=max(exp)
drop if s==.
expandcl s if !sp,cl(year stkcd) gen(g)
bys year stkcd:replace exp=_n if !sp
bys year ind daq exp:egen r=sum(roa*sp)
g q=abs((roa-r)/r) if !sp
*(根据30楼的原则)若要sp=0的观测值最多匹配一次:在此处增加以下几步(否则直接删除以下几步即可)。
*它满足“顺次最小化波动”原则
su exp
loc m=r(max)
forv i=1/`m'{
bys year ind daq sp (q exp stkcd): g exps=exp[`i'] if !sp
bys year ind daq sp (q exp stkcd): g stkcds=stkcd[`i'] if !sp
bys year ind daq sp (q exp stkcd): replace q=. if exp==exps&_n>`i'
bys year ind daq sp (q exp stkcd): replace q=. if stkcd==stkcds&_n>`i'
drop exps stkcds
}
drop if q==.&!sp
bys year ind daq exp:egen u=min(q) if !sp
drop if u!=q&!sp
egen mat=group(year ind daq exp)
drop exp-u
sort mat sp


雷达卡
京公网安备 11010802022788号







