全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
6863 9
2012-12-27
手头有一些医院的数据panel data,7年的数据,每年的医院都有一些不一样的。想把这七年当中相同的医院找出来,并且把数据合并到一张表里,该怎么做呢。我是使用stata的新手,请帮忙回答详细些。感激万分。数据样式

table 1
suryea   provincename   hospitalname  expenditure  revenue
2001             A                       a                 XX                XX
2001             B                       a                 XXX              XXX
2001             B                       b                 XX                 XX

table2
suryea   provincename   hospitalname  expenditure  revenue
2002             A                       a                 XX                XX
2002             B                       a                 XXX              XXX
2002             B                       c                 XX                 XX


想合并成的样子
suryea   provincename   hospitalname  expenditure  revenue
2001             A                       a                 XX                XX
2001             B                       a                 XXX              XXX

2002             A                       a                 XX                XX
2002             B                       a                 XXX              XXX


每年的数据的变量数是一样的,但观察值有区别,关键变量是省份的名字和医院名字,只有这两个变量同时匹配时才能认定是同一家医院的数据, 该如何实现这个操作呢,多谢
二维码

扫码加我 拉你入群

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

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

全部回复
2012-12-27 20:07:41
继续求啊,各位高手抽空帮帮忙。
二维码

扫码加我 拉你入群

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

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

2012-12-27 20:36:39
【i'm rookie】没太理解意图,我想就是两个表append,然后keep if provincename=="A" & hospitalname=="a"这是你说的同时匹配么,用&连接两个条件?
hospital.zip
大小:(13.56 KB)

 马上下载


import excel using hos.xls, firstrow sheet("Sheet1") clear
save svy1,replace
import excel using hos.xls, firstrow sheet("Sheet2") clear
save svy2,replace
use svy1,clear
append using svy2
keep if (provincename=="A" & hospitalname=="a") | ///
(provincename=="B" & hospitalname=="a")
save svy,replace



二维码

扫码加我 拉你入群

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

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

2012-12-27 21:43:36
可能是我没太表述清楚,我的数据库是不同省份每年的医院经营方面的数据,每年大概1000所医院,共有7年的数据,但每年的医院并不完全一样,因为有倒闭的还有合并的,我想在这些数据里找到在这七年里一直都存在的医院,7年内任意一年数据不完整的医院剔除掉。

或者说是一个有条件的append,只有关键变量省名,医院名完全匹配的数据才做append,如何实现呢?
二维码

扫码加我 拉你入群

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

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

2012-12-27 21:54:41
monstersivle 发表于 2012-12-27 20:36
【i'm rookie】没太理解意图,我想就是两个表append,然后keep if provincename=="A" & hospitalname=="a"这 ...
十分感谢,但是不太容易实现,我想做的其实是一个有条件的append,只有关键变量provincename 和 hospitalname完全匹配然后才做数据的纵向合并,不匹配的数据删掉。
keep if (provincename=="A" & hospitalname=="a") | ///
(provincename=="B" & hospitalname=="a")
因为我也不知道哪些省份的哪些医院是7年内一直都存在的,所以好像用不了这个命令啊,另外有六十多个省市,将近一千家医院,手动输这个命令好像也不太现实哦。
不管怎么说,还是十分感谢!
二维码

扫码加我 拉你入群

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

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

2012-12-28 00:15:02
tatarose 发表于 2012-12-27 21:54
十分感谢,但是不太容易实现,我想做的其实是一个有条件的append,只有关键变量provincename 和 hospital ...
不客气。
好,7年数据,每年的数据做以下处理
因为同一所医院在好几个省都有分院,等于说其实观测值的识别符是 省+医院
所以可以将2变量合并作为识别符,命名为id,
egen id=concat(provincename hospitalname), punct(-)
concat(varlist)是合并两个字串的命令,用连字符hyphen"-"连接 【之后可以用split , p("-")还原回省、医院】
然后存成tab`i'.dta, 1-7 (因为不知道哪些id是7年里一直有的,所以现在还做不了什么动作)
然后merge, identifier 用这个合并出的id 和 year
foreach i of numlist 1/7 {
merge 1:1 id year using tab`i', nogenerate
}
nogenerate就是不生成_merge这个合并结果dummy
全部操作如下:
foreach i of numlist 1/2{
        import excel using hos.xls, firstrow sheet("Sheet`i'") clear
        rename provincename prov
        rename hospitalname hos
        rename expenditure exp
        rename revenue rev
        rename suryea year
        egen id=concat(prov hos), punct("-")
        drop prov hos
        order id year exp rev
        save svy`i',replace
}
如果在此前提下:每年: 每家省市医院 id=prov+hos,只有一条记录。年支出、年收入, 或者之前处理的时候duplicates drop一下:
use svy1,clear
foreach i of numlist{
* 用两个identifier: year 和 id,nogenerate 不生成_merge显示合并结果的dummy
  merge 1:1 year id using svy`i', nogenerate
}
sort id year
bysort id: gen n=_N
drop if n!=7

每家省市医院如果7年下都有数据的话,那么应该名下有7条记录,所以数数,然后drop掉那些不等于7的,
剩下的就应该是7年内存活下来的医院了。
split id, parse("-")
rename id1 prov
rename id2 hos
drop id n
order year prov hos
sort year prov hos

是否解决了问题?
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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