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
是否解决了问题?