楼主: xueyuan456
54832 88

[数据管理求助] 求助:选分组配对用循环语句OR PSMATCH2?   [推广有奖]

21
sungmoo 发表于 2012-3-24 15:31:08
无尘第二 发表于 2012-3-22 23:45 当year不是唯一时,上述程序运行遇到下列问题:
*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
已有 7 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
闪闪的鱼鱼 + 1 + 1 + 1 精彩帖子
jjjasmin + 1 + 1 + 1 精彩帖子
郭文轩 + 1 + 1 + 1 精彩帖子
凡尘梦1990 + 1 + 1 + 1 精彩帖子
Sunknownay + 100 + 15 + 1 + 1 + 1 热心帮助其他会员
qiaqiao + 1 + 1 + 1 热心帮助其他会员
无尘第二 + 1 + 1 + 1 对论坛有贡献,实在是太牛了

总评分: 经验 + 100  论坛币 + 15  学术水平 + 7  热心指数 + 7  信用等级 + 7   查看全部评分

22
qjq 发表于 2012-3-28 14:47:36
sungmoo 发表于 2012-3-24 15:31
*year与stkcd的各种组合应是唯一的(或者说,它们可以用来定义panel data)。若不是,可用duplicates drop来 ...
楼主,你的这个程序似乎确实无法保证配对样本不被重复。
我对match3跑完你的程序后,先drop mat,再duplicates drop,发现有28个完全相同的样本被删除
. drop mat
. duplicates drop
Duplicates in terms of all variables
(28 observations deleted)
或者在跑完程序后duplicates report:
. duplicates report
Duplicates in terms of all variables
--------------------------------------
   copies | observations       surplus
----------+---------------------------
        1 |          272             0
        2 |           28            14
        3 |           12             8
        4 |            8             6
--------------------------------------
说明有样本被重复配对。
顺便说一下,前面https://bbs.pinggu.org/thread-696047-1-1.html中voodoo的程序也存在配对样本重复配对的问题。
非常感谢大家无私且卓越的贡献。

23
sungmoo 发表于 2012-3-28 16:04:43
qjq 发表于 2012-3-28 14:47
楼主,你的这个程序似乎确实无法保证配对样本不被重复。
这里先讨论一个问题:

“sp=1且stkcd不同”的观测值是否可以匹配sp=0的同一stkcd的观测值?

简而言之,这里首先讨论的是匹配原则的问题。

举个例子。有四个“sp=1且stkcd不同”的观测值,但仅有一个满足基本条件的(比如同年同行业等等)sp=0的观测值。那么,前面四个观测值是否应该都匹配上后面这个(单一)观测值?

24
qjq 发表于 2012-3-29 09:58:20
sungmoo 发表于 2012-3-28 16:04
这里先讨论一个问题:

“sp=1且stkcd不同”的观测值是否可以匹配sp=0的同一stkcd的观测值?
楼主高见,确实存在如你所说的情况。
但如果允许“sp=1且stkcd不同”的观测值可以匹配sp=0的同一stkcd的观测值,那么最后在对配对好的整体样本(即既有sp=1又有sp=0的样本)进行分析时,例如进行回归以检验sp是否显著影响某个因变量时,整体样本将存在重复的样本,这个是不允许的。
因此,更合理的配对原则应该要求:某个sp=0的样本一旦按照roa最接近的原则被配对给某个sp=1的样本后,则不再被考虑。
仍以你的例子来说明。四个“sp=1且stkcd不同”的观测值,但仅有一个满足基本条件的(比如同年同行业等等)sp=0的观测值。那么,前面四个观测值只能有一个可以匹配上后面这个(单一)观测值,谁的roa最为接近就匹配谁。其他的三个无法匹配。
但这是比较极端的情况。现在假设四个“sp=1且stkcd不同”的观测值,但有两个满足基本条件的(比如同年同行业等等)sp=0的观测值。那么,前面四个sp=1的观测值,将首先有一个按照roa最为接近的原则匹配上两个sp=0的观测值的其中一个。然后剩下三个sp=1和一个sp=0。再根据roa最接近匹配,只有一个sp=1获得匹配,有2个sp=1无法获得匹配。
在很多情况下,sp=0的配对样本都是远远大于sp=1的初始样本的,因此根据上面的唯一配对原则,最后sp=1的样本一般都可以从sp=0的样本中获得全部配对。(不知道match3是否也这样?)
当然了,我只会提问题,至于如何解决问题则差远了,所以还请楼主这样的高手,如果可以的话,看看能否在原程序上考虑上述唯一配对的问题。楼主的程序确实简洁明快!
非常感谢!


25
sungmoo 发表于 2012-3-29 14:15:34
更合理的配对原则应该要求:某个sp=0的样本一旦按照roa最接近的原则被配对给某个sp=1的样本后,则不再被考虑。
见前面修正的帖子(蓝色部分)。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
qjq + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

26
qjq 发表于 2012-3-30 11:00:13
楼主,这个新增的命令是不是相当于将重复配对的样本删除?
是这样的,我检查了一下新程序的配对结果,发现有如下问题,以stkcd=498、year=2007、ind=c4、daq=1的样本为例:
使用新程序前,498的配对样本为600633,这个600633被重复配对2次,另一个配给了样本719。
在使用新程序后,498没有获得配对,600633被配对给了样本719。
我奇怪的是,sp=0的配对样本数量挺多的,难道剩下的配对样本没有和498条件接近的?
为此我截取了year=2007、ind=c4的样本,并gsort -sp daq roa后,得到的数据如下:
2.jpg
从中可以看到,除600633外,编号第5~12的样本其实都可以作为配对,为什么楼主的程序都将其拒绝呢?
例如如果以roa最为接近的话,编号第5的样本就可以作为498的配对。
是楼主设定的roa波动率绝对值最小的要求吗?可是这点不应该妨碍剩余样本的配对啊?
当然,我问的问题有点多了,也是因为对这个配对很感兴趣,楼主有空就回答,没空就罢了。
不管怎样,楼主是个热心的高手,非常感谢!

27
qiaqiao 发表于 2012-3-30 11:52:23
sungmoo好, 我遇到类似的问题,

程序很好用, 非常感谢

28
sungmoo 发表于 2012-3-30 12:15:51
我问的问题有点多了,也是因为对这个配对很感兴趣
个人以为,最好一并、完整、细致地说清楚你的配对方案(或原则)。每个人的配对方案未必一致。
是楼主设定的roa波动率绝对值最小的要求吗?可是这点不应该妨碍剩余样本的配对啊?
对于sp=1与sp=0都存在多个观测值的情形,若多个sp=1的观测值的“最符合匹配要求的”sp=0的观测值是相同的,则根据什么把该sp=0的观测值匹配给这个(sp=1的观测值)而不是那个(sp=1的观测值)?

其实,这里不是“问的问题多了”,而是没有看到完整、细致的配对规则说明。
再根据roa最接近匹配,只有一个sp=1获得匹配,有2个sp=1无法获得匹配
你在之前的帖子也提到过这一点。但是,在新帖子中,你的匹配原则似乎又变动了。

这里的“无法获得匹配”是什么意义?(或者,对应什么原则?)

29
sungmoo 发表于 2012-3-30 12:19:49
为此我截取了year=2007、ind=c4的样本,并gsort -sp daq roa后,得到的数据如下:
*以match3为例(亦以你举的例子为例)

sort year ind daq sp stkcd

*应该得到如下数据:

stkcd           year         roa             ind      daq    sp
609             2007        .155882        C4        1        0
620             2007        .129541        C4        1        0
732             2007        .053953        C4        1        0
791             2007        .017712        C4        1        0
600378        2007        .043076        C4        1        0
600599        2007        .07363         C4         1        0
600617        2007        .046283        C4        1        0
600633       2007        -.03197        C4        1        0
600985        2007        .043491        C4        1        0
498              2007        -.607564       C4         1         1
719              2007        -.323066       C4         1         1


上面数据中,sp==1有两个观测值。显然,sp==0的观测值中,只有stkcd==600633的roa与它们都最接近。按你的原则,就上面这些观测值,应该怎么配对?(简单说,根据什么将此值只配给stkcd==498或stkcd==719而非另一个?)

30
qjq 发表于 2012-3-31 10:09:46
sungmoo 发表于 2012-3-30 12:19
*以match3为例(亦以你举的例子为例)

sort year ind daq sp stkcd
楼主,非常感谢你的答复。其实新程序已经很好用,我之所以还问问题,是因为觉得sp=1的样本本来就少(match3中,总观测值为4871,但sp=1的观测值只有163,而sp=0的样本则为4708),但在新程序下有一些sp=1的样本没有获得配对(如stkcd==498),这样会导致配对后可用于分析的sp=1的样本更少。所以就想能否改进一下配对原则?

下面是我的配对规则。仍以match3.dta为例,要求为试验组(即sp=1的样本,共163个)在对照组(sp=0,共4708个)中寻找配对样本,配对规则如下:
(1)同行业ind。
(2)同年度year。
(3)应计额daq一样。
(4)roa最接近(这里roa是指原值本身,不是绝对值),具体而言,就是对照组与试验组的roa的差的绝对值最小;以楼主给出的数据为例,由于600633的roa与sp=1的两个观测值都接近,为此计算roa的差的绝对值,对于498:abs1=abs[(-.607564)-(-.03197)]=0.575594;对于719:abs2=abs[(-.323066)-(-.03197))]=0.291096。由于abs1>abs2,因此600633优先配对给719。
(5)每个对照组观测值只能配对一次。延续上面规则(4)的说明,由于600633已经配对给了719,因此600633不再被考虑。
(6)尚未获得配对的实验组观测值,从尚未被配对的对照组观测值中,继续按照上述规则(1)~(5)选择配对。延续规则(5)的说明,由于实验组498尚未获得配对,因此继续在剔除了600633的对照组中寻找配对。而根据roa的差的绝对值最小的原则,此时观测值791应该作为配对。这样,sp=1的两个样本就都获得了配对,而不是只有719获得配对。
stkcd           year         roa             ind      daq    sp
609             2007        .155882        C4        1        0
620             2007        .129541        C4        1        0
732             2007        .053953        C4        1        0
791             2007        .017712        C4        1        0
600378          2007        .043076        C4        1        0
600599          2007        .07363         C4        1        0
600617          2007        .046283        C4        1        0
600633          2007        -.03197        C4         1        0
600985          2007        .043491        C4         1        0
498             2007        -.607564       C4         1        1
719             2007        -.323066       C4         1        1


仍以match3数据为例,在上述规则下,不知程序如何改进?
再次感谢楼主的答复!

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-26 13:17