voodoo 发表于 2010-2-10 23:55 
试试:
// 生成模拟数据,非平衡面板数据
clear
set more off
set obs 1000
gen stkcd = _n
gen industry = ceil(10*uniform()) // 10个行业
gen exchange = cond(uniform() 1
save sample, replace
// 主程序
use sample, clear
sort stkcd year // 假定为long form数据,否则用reshape命令
save temp, replace
capture postclose match
postfile match group stkcd year dmatch using matchsample.dta, replace
local total = _N
local j = 0
forval i = 1/`total' {
preserve
local lstkcd = stkcd[`i']
local lyear = year[`i']
local lexchange = exchange[`i']
local lindustry = industry[`i']
local lasset = asset[`i']
quietly drop in `i' // 删除自身
quietly keep if industry == `lindustry'
quietly keep if year == `lyear'
quietly keep if exchange == `lexchange'
gen assetratio = abs(asset / `lasset' - 1)
quietly keep if assetratio
+++++++++++++++++++++++++
voodoo在回复中应用到一组命令:postfile post postclose等命令,它等同于我们可以同时操作多个文件,(事实上仅仅是将数据存入另外一个文档)。
不过我们还是不能同时访问它,比如读取某个数据或全部数据,(我们现在的做法是合并数据或将数据存入loca 或mat,(当然如果用mata就可以同时访问多个mat,也等同于同时访问了多个数据库))
如果stata如果有个可以这样的命令:访问命令,比如在内存中有master data,用这个访问命令可以用来读取另外一个using data的数据?
没有细查,不知是否有与post功能相反的命令?