我已经问过question如何检查变量是否存在。尼克考克斯回答说。然后我尝试修改答案并使用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"
}
我还尝试使用of
代替in
...仍然没有结果。我收到一条消息var2 not found
并且它停止执行。 capture
必须以foreach
为前缀吗?我试过......没用?
答案 0 :(得分:7)
这有点微妙。
鉴于var2
不存在,Stata仍然被指示(在else
分支内)
display `var' "DOES NOT EXIST"
将被解释为
display var2 "DOES NOT EXIST"
所以,它首先看到了
display var2
它倾向于解释为
display var2[1]
- 第一次观察中的值 - 但由于所述var2
不存在,Stata抱怨。
你想要的是显示名称var2
,而不是它的内容(再一次,不存在),修复只是
else display "`var' DOES NOT EXIST"
双引号分隔符的位置至关重要,以强制display
不存在的事物的名称。不存在的事物的名称只是任意文本,Stata对此类文本没有任何问题。
简而言之,当被送到display
"`macro'"
是要显示的字符串,但
`macro'
是要显示的变量或标量的名称,或者是要显示已定义内容的宏。
顺便说一下,你的循环只是覆盖了之前存储的结果集,但可能你会在适当的时候达到这个目的。