全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
5242 14
2009-11-21
各位老师:有一个数据库data1,其中有一个变量id,另外一个数据库data2,包含三个变量;group,begin,end.如下表,现想对data1用data2指定的分组办法分组(begin & end指data1中id的范围,group为组别),,请各位老师帮助!
data1data2
idgroupbegin
end
1113
2246
3378
44910
551118
661928
772930
883152
995355
10
11
12
13
14
15
16
17
18
19
20
二维码

扫码加我 拉你入群

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

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

全部回复
2009-11-22 16:50:55
*设data2中end的最大值即data1中id的最大值,且data1中每个id可以有多个观测值
use data2,clear
expandcl end-begin+1,cl(group) gen(id)
keep group id
save data,replace
use data1,clear
joinby id using data
二维码

扫码加我 拉你入群

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

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

2009-11-22 21:19:09
谢谢sungmoo老师:
您的这种思路很巧妙!将分组巧妙的转化,非常感谢!
二维码

扫码加我 拉你入群

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

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

2009-12-5 19:26:15
经调试,有一个问题不好解决:如果data1中的数据id有不连续的,比如10直接到15,则sungmoo老师的语句会出现错误,由expandcl end-begin+1,cl(group) gen(id)产生的是一个连续的id。与data1中的id没有对应。
请路过的老师帮助解决一下!
(我暂时用的方法是将data1拆分成几个文件产,然后再用sungmoo老师的方法)
二维码

扫码加我 拉你入群

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

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

2009-12-5 21:52:11
*data1中id在data2中begin最小值与end最大值之间,且data1中id在data2中均出现过。
use data1,clear
keep id
bys id: keep if _n<2
save data,replace
use data2,clear
expandcl end-begin+1,cl(group) gen(id)
keep group id
append using data
bys id: g g=_N
keep if g>1&group<.
drop g
save data,replace
use data1,clear
joinby id using data
二维码

扫码加我 拉你入群

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

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

2009-12-6 09:34:54
*以下更一般(data1中id在data2中begin最小值与end最大值之间),并涵盖了2楼。
use data2,clear
expandcl end-begin+1,cl(group) gen(id)
bys group: replace id=begin[1]+_n-1
keep group id
append using data1
bys id: g g=_N
drop if g<2&group<.
bys id: egen mn=min(group) if g>1
drop if group<.&g>1
drop g group
ren mn group
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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