筛选配对样本的程序,论坛里面有很多大神都给了解答。
比较有代表性的有:
https://bbs.pinggu.org/thread-498689-1-1.html
和
https://bbs.pinggu.org/thread-696047-1-1.html
我有一个数据,其中有一个dummy变量是chg,我想做的是对每一个chg=1的观测,在chg=0的范围内,按照相同年度、相同行业、资产规模最接近的原则,选取1:1配对样本。
按照第一个贴
sungmoo的方法(包括后面的补丁)选出了样本。但是说实话,对程序的内在逻辑没有弄懂,只是改了关键地方的变量。
但是对第二帖,我对程序该的过程中不知道哪里出错,总是陷入死循环。。。所以贴出来,希望哪位高手能给debug一下
sort code yr
set more off
capture postclose match
postfile match group code yr dmatch using matchsample.dta, replace
local total = _N
local j = 0
forval i = 1/`total' {
preserve
local lchg = chg[`i']
if `lchg'==0 {
restore
continue
}
local lcode = code[`i']
local lyr = yr[`i']
local lind = ind[`i']
local lta = ta[`i']
quietly drop in `i' // 删除自身
quietly keep if ind == "`lind'"
quietly keep if yr == `lyr'
gen taratio = abs(ta / `lta' - 1)
quietly keep if taratio <= 0.3 // 将条件分成四句keep if ,有助于加快程序
if _N < 1 { // 若没有公司满足条件,则直接进入下一循环
restore
continue
}
sort taratio
local mcode = code[1] // 若有多个公司满足条件,则用盈利能力最接近的公司
local j = `j' + 1
post match (`j') (`lcode') (`lyr') (0)
post match (`j') (`mcode') (`lyr') (1)
restore
}
postclose match