denver 发表于 2009-6-19 09:30 
另外,有个问题:不知道preserve和restore在这里起什么作用,因为forvalue本身就是一个循环了,因此去掉preserve和restore对于结果应该没有影响。
明白denver的意思,对main改写如下,即无需preserve和restore(而且该方法比8楼的效率高,运行速度快——本来以为preserve是将数据preserve在内存中,然后从内存中restore,查阅manual后才发现是preserve到disk中,因此用preserve和restore还不如直接用use ..., clear):
// main
use sheet1, clear
local num = _N
forval i = 1/`num' {
use sheet1, clear
local name = name[`i']
local class = class[`i']
local weight = weight[`i']
local year = year[`i']
quietly use if class == "`class'" ///
& weight <= `weight'+20 & weight >= `weight'-20 ///
& year == `year' using sheet2, clear
gen nameo = "`name'"
// gen classo = "`class'"
// gen weighto = `weight'
// gen yearo = `year'
append using comparables
quietly save comparables, replace
}
use comparables, clear
list