Loops 检查变量';使用Stata存在
我已经问过如何检查变量的存在。尼克·考克斯回答了。然后我尝试修改答案并使用Loops 检查变量';使用Stata存在,loops,capture,stata,Loops,Capture,Stata,我已经问过如何检查变量的存在。尼克·考克斯回答了。然后我尝试修改答案并使用foreach循环,但没有成功: foreach var in var1 var2 var3 { capture su `var', meanonly if _rc == 0 { local varMean = r(mean) local varMin = r(min) local varMax = r(max) } else display `var' "DOES NOT EXIST" } 我也试着用的代替中的…仍然没
foreach
循环,但没有成功:
foreach var in var1 var2 var3 {
capture su `var', meanonly
if _rc == 0 {
local varMean = r(mean)
local varMin = r(min)
local varMax = r(max)
}
else display `var' "DOES NOT EXIST"
}
我也试着用的
代替
中的…仍然没有结果。我收到一条消息var2未找到
,它停止执行。capture
是否必须在foreach
前面加前缀?我试过了……没用?这有点微妙
鉴于var2
不存在,Stata仍被指示(在else
分支中)执行以下操作:
这可以解释为
display var2 "DOES NOT EXIST"
所以,它首先看到
display var2
它倾向于解释为
display var2[1]
--第一次观察中的值——但正如所说的var2
不存在,Stata抱怨道
您想要显示的是名称var2
,而不是它的内容(同样,它也不存在),并且修复程序非常简单
else display "`var' DOES NOT EXIST"
双引号分隔符的位置对于强制显示不存在的事物的名称至关重要。不存在的东西的名称只是任意文本,斯塔塔对这种文本没有任何问题
简而言之,当馈送至显示时
"`macro'"
是要显示的字符串,但
`macro'
要显示的变量或标量的名称,或具有要显示的已定义内容的宏的名称
顺便说一句,您的循环只是覆盖了先前存储的结果集,但您可能会在适当的时候得到它
`macro'