全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
2012-3-31 19:31:41
仍以match3数据为例,在上述规则下,不知程序如何改进?
见21楼修正。
二维码

扫码加我 拉你入群

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

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

2012-4-1 16:06:53
受用匪浅!非常感谢!
二维码

扫码加我 拉你入群

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

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

2012-4-9 19:55:06
*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的观测值最多匹配一次:在此处增加以下两步(否则直接删除以下两步即可)
bys year ind daq stkcd: egen t=min(q) if !sp
drop if t!=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
发现小问题:跑完之后还有34个未成功配对的样本。
试输入下列命令:
bys mat:gen t=_N
codebook t

得到:
  type:  numeric (float)

                 range:  [1,2]                        units:  1
         unique values:  2                        missing .:  0/292

            tabulation:  Freq.  Value
                            34  1
                           258  2
换言之,只剩下258对成功配对的样本。
而修正前的程序删除sp=0的重复值,最后也是得到258对成功配对的样本。
二维码

扫码加我 拉你入群

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

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

2012-4-9 21:07:44
无尘第二 发表于 2012-4-9 19:55
发现小问题:跑完之后还有34个未成功配对的样本。
试输入下列命令:
bys mat:gen t=_N
关键要看一下:两种方法配对的结果具体有什么不同。
二维码

扫码加我 拉你入群

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

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

2012-4-10 21:06:55
indc7daq1 谢谢sungmoo!自己水平实在太臭,故而不断提些问题出来,希望不要浪费您太多时间。
试举一例:
配对规则见30楼qjq(请注意“(4)roa最接近(这里roa是指原值本身,不是绝对值)......”)。
use match3,clear
sort year ind daq sp stkcd
截取ind为C7,daq为1的数据如下,可以发现sp=1的试验组有3个样本600340,600890,600892,可供配对的对照组有17个样本(见图indc7daq1)。

根据21楼修正后的程序配对,600890和600340配对成功,600892未找到对照组。按“roa最接近”的原则,可以找到600753作为对照组(见图indc7daq1配对结果)。

附件列表
indc7daq1配对结果.jpg

原图尺寸 25.1 KB

indc7daq1配对结果

indc7daq1配对结果

二维码

扫码加我 拉你入群

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

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

2012-4-10 21:14:32
indc7daq3配对结果 indc7daq3
再举一例:
use match3,clear
sort year ind daq sp stkcd
截取ind为C7,daq为3的数据如下,可以发现sp=1的试验组有2个样本600338和600435,可供配对的对照组有12个样本(见图indc7daq3)。

根据21楼修正后的程序配对,600338和901配对成功,600435未找到对照组。按“roa最接近”的原则,可以找到521作为对照组(见图indc7daq3配对结果)。

之所以提出这问题,主要是由于sp=1的样本太少。如果再有一些样本未成功配对,回归时就比较麻烦了。
二维码

扫码加我 拉你入群

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

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

2012-4-13 00:01:12

match4.rar
大小:(11.12 KB)

 马上下载

本附件包括:

  • match4.dta

谢谢sungmoo!

我再啰嗦一下:

数据为附件match4.dta,要求为试验组(即sp=1的样本,共106个)在对照组(sp=0,共1152个)中寻找配对样本,配对规则如下:

(1)同年度year

(2)同行业ind

(3)asset最接近,即对照组与试验组asset的差的绝对值最小。

(4)每个对照组观测值只能配对一次,不同年份之间也不能重复。比如,2004sp=1的样本2001的配对样本为2002,则在余下的配对过程中不能再出现配对样本2002,哪怕是不同年份。

我的问题:

运行根据sungmoo改编的如下程序,

year=2004ind=Csp=1stkcd=2001”的配对样本为“year=2004ind=Csp=0stkcd=2002”;“year=2007ind=Csp=1stkcd=2196”的配对样本为“year=2007ind=Csp=0stkcd=2002”,注意这里“sp=0stkcd2002”重复出现2次,不符合上述第(4)条规则。按规则,应该是在stkcd=2002以外的对照组中寻找与“year=2007ind=Csp=1stkcd=2196asset最接近的配对样本。该怎样修正程序呢?

use match4,clear

set more off

bys year ind sp (stkcd): g exp=_n if sp

bys year ind: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 exp: egen r=sum(asset*sp)

g q=abs((asset-r)/r) if !sp

su exp

loc m=r(max)

forv i=1/`m'{

bys year ind sp (q exp stkcd): g exps=exp[`i'] if !sp

bys year ind sp (q exp stkcd): g stkcds=stkcd[`i'] if !sp

bys year ind sp (q exp stkcd): replace q=. if exp==exps&_n>`i'

bys year ind sp (q exp stkcd): replace q=. if stkcd==stkcds&_n>`i'

drop exps stkcds

}

drop if q==.&!sp

bys year ind exp: egen u=min(q) if !sp

drop if u!=q&!sp

egen mat=group(year ind exp)

drop exp-u

sort mat sp

二维码

扫码加我 拉你入群

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

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

2012-4-13 07:06:04
goooooooooooood
二维码

扫码加我 拉你入群

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

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

2012-4-13 09:00:30
(1)同年度year。
(2)同行业ind。
(3)asset最接近,即对照组与试验组asset的差的绝对值最小。
(4)每个对照组观测值只能配对一次,不同年份之间也不能重复。
use match4.dta, clear
bys year ind sp (stkcd):g exp=_n if sp
bys year ind :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 exp:egen r=sum(asset*sp)
g q=abs(asset-r) if !sp

sort q stkcd
count if q<.
loc m=r(N)
forv i=1/`m'{
loc v=stkcd[`i']
replace q=. if stkcd==`v'&_n>`i'&!sp
}
drop if q==.&!sp

bys year ind exp:egen u=min(q) if !sp
drop if u!=q&!sp
egen mat=group(year ind exp)
drop exp-u
sort mat sp
二维码

扫码加我 拉你入群

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

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

2012-4-13 22:59:09
sungmoo,run这个程序会陷入死循环了………………
二维码

扫码加我 拉你入群

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

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

2012-4-14 04:42:14
无尘第二 发表于 2012-4-13 22:59
sungmoo,run这个程序会陷入死循环了………………
就你给的match4.dta,可以运行出结果
二维码

扫码加我 拉你入群

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

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

2012-4-16 10:48:02
sungmoo 发表于 2012-3-24 15:31
*year与stkcd的各种组合应是唯一的(或者说,它们可以用来定义panel data)。若不是,可用duplicates d ...
sungmoo, you are so great! the modified program is perfect!
二维码

扫码加我 拉你入群

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

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

2012-4-17 20:33:09
谢谢sungmoo!可以运行的,加一条 “set more off”更加方便.
二维码

扫码加我 拉你入群

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

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

2012-6-23 00:02:02
无尘第二 发表于 2012-2-19 11:34
/*下面的程序是对match1.dta中的所有观测值都寻找匹配样本(即sp=1的样本与sp=1的样本配对),而要求是针对其 ...
“针对其中sp=1的公司,寻找sp=0(即配对样本必须sp=0)”
你好 请问以上这条件在你发的程序中体现在哪儿呢?
二维码

扫码加我 拉你入群

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

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

2012-6-23 00:30:37
sungmoo 发表于 2012-2-23 08:03
*稍微调整一下(结果不变。补充:若mat值只出现一次,则原数据无匹配可能;若mat值重复两次以上,则原数据有 ...
你好,请问为什么运行你的程序,会出现以下问题:

. expandcl s if !fenlei,cl(year stkcd) gen(g)
no room to add more observations
    An attempt was made to increase the number of observations beyond what is currently possible.  You have the following alternatives:

     1.  Store your variables more efficiently; see help compress.  (Think of Stata's data area as the area of a rectangle; Stata can trade off
         width and length.)

     2.  Drop some variables or observations; see help drop.

     3.  Increase the amount of memory allocated to the data area using the set memory command; see help memory.
该怎么解决?
二维码

扫码加我 拉你入群

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

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

2012-7-10 16:39:13
sungmoo 发表于 2012-4-13 09:00
use match4.dta, clear
bys year ind sp (stkcd):g exp=_n if sp
bys year ind :egen s=max(exp)
看了sungmoo对本贴问题的解答,很受启发,现在使用数据match4学习时,遇到一个问题,使用stata12运行本程序后,发现总样本为181家[见附件],有样本配对成功,请指导一下。
另外:下面这段程序的目的是什么,没太看明白。
sort q stkcd
count if q<.
loc m=r(N)
forv i=1/`m'{
loc v=stkcd[`i']
replace q=. if stkcd==`v'&_n>`i'&!sp
}
我大致的理解是:如果是本证券公司,序号大于本公司,且SP!=1,把赋值q=.
序号小于本公司的公司如何处理呢?

初学stata,问题可能比较初级,请多包涵。

附件列表

match4_1.zip

大小:2.55 KB

 马上下载

本附件包括:

  • match4_1.dta

二维码

扫码加我 拉你入群

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

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

2012-8-13 14:07:12
想按照年份,行业和规模配对, 按照给出的方法,即想找行业相同, 当天的规模相近的配对,
其中 'd'是日期, nindcd表示行业
bys  d nindcd sp(stkcd): g exp=_n if sp
提示错误
factor variables and time-series operators not allowed
不知道怎么解决
二维码

扫码加我 拉你入群

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

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

2012-10-20 21:05:57
学习了,感谢
二维码

扫码加我 拉你入群

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

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

2013-4-15 00:52:54
sungmoo 发表于 2012-4-13 09:00
use match4.dta, clear
bys year ind sp (stkcd):g exp=_n if sp
bys year ind :egen s=max(exp)
你好!我是stata菜鸟啊!我在运行这个程序的时候,在运行
forv i=1/`m'{
loc v=stkcd[`i']
replace q=. if stkcd==`v'&_n>`i'&!sp
}
时,stata会出现invalid syntax,这是因为什么啊?
期望您尽快回复,比较急~~谢谢啦!
二维码

扫码加我 拉你入群

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

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

2013-4-15 01:24:35
sungmoo 发表于 2012-4-13 09:00
use match4.dta, clear
bys year ind sp (stkcd):g exp=_n if sp
bys year ind :egen s=max(exp)
match5.rar
大小:(30.19 KB)

 马上下载

本附件包括:

  • match5.dta


谢谢sungmoo!
数据为附件match5.dta,有2年的数据,要求为试验组(即sp=1的样本,共870个)在对照组(sp=0,共2281个)中寻找配对样本,配对规则如下:
(1)同年度year。
(2)同行业ind。
(3)asset最接近,即对照组与试验组asset的差的绝对值最小。
(4)每个对照组观测值只能配对一次,尽量sp=1的每一条观测都能配对上

根据您的程序,我运行的时候循环总会出现 “valid syntax” ,这是什么原因?
希望您给个do文件,谢谢!~~~`

二维码

扫码加我 拉你入群

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

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

2013-5-11 19:13:56
无尘第二 发表于 2012-4-17 20:33
谢谢sungmoo!可以运行的,加一条 “set more off”更加方便.
match4程序跑的很慢,哪边加set more off会更方便?
多谢!
二维码

扫码加我 拉你入群

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

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

2013-5-12 01:44:52
无尘第二 发表于 2012-4-13 00:01
谢谢sungmoo!我再啰嗦一下:数据为附件match4.dta,要求为试验组(即sp=1的样本,共106个)在对照组(sp=0, ...
衷心感谢,如果一个实验组配两个对照组,命令该如何设置?衷心期待
二维码

扫码加我 拉你入群

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

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

2013-6-28 10:52:37
求助,我的问题和无尘的一样,
对sp=1 的找到 sp=0的1:1配对
要求同 year ind daq , 并且size 最接近

我运行程序时, expandcl s if !insider,cl(year stkcd)gen(g)
出现错误  expression is not constant within clusters

另外, 想问一下数据量比较少时,1:2怎么配对,
非常感谢
刚才shelp.rar 数据我前面merge时有点小问题
抱歉,更新一下数据, shelp-2.rar


真粗心呀 sorry 现在数据newhelp.rar
1:2配对和 1:1配对 如果可以的话, 请教程序差别在哪里

附件列表

shelp.rar

大小:32.41 KB

 马上下载

本附件包括:

  • shelp.dta

shelp-2.rar

大小:31.11 KB

 马上下载

本附件包括:

  • shelp.dta

newhelp.rar

大小:45.72 KB

 马上下载

本附件包括:

  • newhelp.dta

二维码

扫码加我 拉你入群

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

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

2013-6-28 14:57:23
要求同 year ind daq , 并且new_lnasset 最接近
原数据中没有new_lnasset变量。

新数据中没有ind变量。

二维码

扫码加我 拉你入群

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

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

2013-6-28 15:08:36
size
二维码

扫码加我 拉你入群

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

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

2013-7-28 01:43:04
请教各位达人:为何 运行到这个命令:postfile match group stkcd dmatch using matchsample1.dta, replace ,屏幕提示(note: file matchsample1.dta not found),然后发现matchsample1.dta是空白,matchsample1.dta是额外的文件吗? 非常感谢!
二维码

扫码加我 拉你入群

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

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

2013-7-28 21:15:55
sungmoo给出的程序一如既往的好用,但请问如果改为同行业、同年、ROA上下30%,该如何您的配对程序?谢谢!
二维码

扫码加我 拉你入群

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

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

2013-7-30 18:25:52
呼唤万能的sungmoo现身求解!
二维码

扫码加我 拉你入群

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

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

2013-10-28 17:47:01
鬼斧神工……
二维码

扫码加我 拉你入群

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

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

2013-12-26 12:18:39
hnsyxs 发表于 2012-6-23 00:30
你好,请问为什么运行你的程序,会出现以下问题:

. expandcl s if !fenlei,cl(year stkcd) gen(g)
你的stata内存不够,设置一下内存就可以了
二维码

扫码加我 拉你入群

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

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

栏目导航
热门文章
推荐文章

说点什么

分享

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