全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
54450 88
2009-07-18
有个问题希望帮忙解决一下,我现在有一个数据库,里面有公司代码(code),年度(year), 资产(assets),所属行业(industry),然后有个哑变量(w)。

我希望针对所有哑变量w=1的公司,寻找w=0,且同年度,同行业,资产(assets)在正负30%范围内的匹配公司, 一对一配对。

那么我是应该采用Local macros的循环语句呢还是用psmatch2呢?还是两个都可以?
如果用Local macros的循环语句,程序应该如何编写? 就是说在forvalues后面应该如何编写能达到针对每个w=1挑选w=0的公司并且要求该公司的行业等等与w=1的公司一致?

如果用Psmatch2, 我用了下面的语句,不知道正确与否,达人们能不能帮忙看看?可是不知道该如何在psmatch2里设置assets+-30%的条件? 是用caliper吗?该如何设置?


psmatch2 w, mahal(year industry)
sort _id
generate match=code[_n1]
generate matchyear=year[_n1]
generate treat=code if _n1 !=.

还有,如果不是选择一对一配对而是选一对多又该怎么做呢?

谢谢谢谢
我附了部分数据,
附件列表

test.rar

大小:17.51 KB

 马上下载

本附件包括:

  • test.dta

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2009-7-26 11:43:04
我已用论坛短信给你回复。若方法可行,请你将最后可用的程序贴出来。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-7-28 17:48:00
最后可行不?有程序不?我和楼主遇到一样的问题,急求
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-2-10 23:25:46
match1.rar
大小:(8.84 KB)

 马上下载

本附件包括:

  • match1.dta

我的问题几乎跟xueyuan456一样,请教一下voodoo:
数据为附件match1.dta,其中虚拟变量sp=1时的stkcd表示是研究对象即试验组。
要求为试验组(即SP=1的样本,共105个)在对照组(sp=0,共1228个)中寻找配对样本,配对规则是:
(1)同行业ind;
(2)同年度year;
(3)应计额daq一样;
(4)绩效roa在上下10%幅度匹配。 数据截图.jpg
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-2-19 11:34:51
/*下面的程序是对match1.dta中的所有观测值都寻找匹配样本(即sp=1的样本与sp=1的样本配对),而要求是针对其中sp=1的公司,寻找sp=0(即配对样本必须sp=0),且同ind,
同daq,roa在正负10%的范围内的配对样本。程序还须改进*/

use match1, clear
sort stkcd                 // 假定为long form数据,否则用reshape命令
save temp, replace
capture postclose match
postfile match group stkcd dmatch using matchsample1.dta, replace
local total = _N
local j = 0
forval i = 1/`total' {
        preserve
        local lstkcd = stkcd[`i']
        local lind = ind[`i']
        local ldaq = daq[`i']
        local lroa = roa[`i']
        quietly drop in `i'       // 删除自身
        quietly keep if ind == "`lind'"
        quietly keep if daq == `ldaq'
        gen roaratio = abs(roa / `lroa' - 1)
        quietly keep if roaratio <= 0.1                  // 将条件分成四句keep if ,有助于加快程序
        if _N < 1 {                // 若没有公司满足条件,则直接进入下一循环
                restore
                continue
        }
        sort roaratio
        local mstkcd = stkcd[1]                // 若有多个公司满足条件,则用roa最接近的公司
        local j = `j' + 1
        post match (`j') (`lstkcd') (0)
        post match (`j') (`mstkcd') (1)
        restore
}
postclose match
use matchsample1, clear
sort stkcd
merge stkcd using temp
keep if _merge == 3
drop _merge
sort group dmatch
set more off
list in 1/20
save lastsample1, replace
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-2-22 23:36:35
荣誉版主sungmoo给出了程序,现贴出来,以飨读者:

*以波动百分比绝对值最小的观测值匹配(mat值相同的两个观测值是匹配组合:sp=0的roa与sp=1的roa相比,波动百分比绝对值最小):
use match1.dta, clear
bys ind year daq sp: g exp=_n if sp
bys ind year daq: egen s=max(exp)
replace s=. if exp<.
expandcl s,cl(stkcd) gen(g)
bys stkcd: g m=_n if s<.&exp==.
egen p=rowtotal(exp m)
keep if p>0
drop s g m
g t=roa if sp
bys ind year daq p: egen r=min(t)
g q=abs((roa-r)/r) if t==.
bys ind year daq p: egen u=min(q) if q<.
drop if q!=u&t==.
egen mat=group(ind year daq p)
drop t r q u exp p
sort mat sp
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群