我有100个dta
文件。我有一个我需要的变量列表keep
并即时保存临时副本。某些变量可能存在于某个特定的环境中,也可能不存在dta
.
我需要 Stata 来保留 a 中存在的所有变量dta
并忽略那些不存在的。
下面的代码有错误的语法,但它可以作为一个很好的伪代码,让人们大致了解应该做什么:
forval j = 1/100 {
use data`j'
local myVarList =""
foreach i of varlist var1 var2 var3 var4 var5 var6 var7 var8 {
capture sum `i'
if _rc = 0 {
`myVarList' = `myVarList'" "`i'
}
}
keep `myVarList'
save temporaryData`j'
}
有什么办法可以做到这一点吗?
您的代码有很多问题。这是进行内循环的一种方法。
/* one fake dataset */
set obs 5
gen var1 = 1
gen var2 = 2
gen var3 = "c"
gen z = 35
ds
/* keep part */
local masterlist "var1 var2"
local keeplist = ""
foreach i of local masterlist {
capture confirm variable `i'
if !_rc {
local keeplist "`keeplist' `i'"
}
}
keep `keeplist'
关键是你不能foreach i of varlist phantomvar
,因为 Stata 会检查是否存在并排除错误。同样,将本地名称放在特殊引号中将会对其进行评估,但您正在尝试重新定义。你可能会发现set trace on
调试中的一个有用的功能。
这是更好的代码:
unab allvars: _all
local masterlist "var1 var2 phantomvar"
local keeplist: list allvars & masterlist
keep `keeplist'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)