CHE*_*HKA 2 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"
}
Run Code Online (Sandbox Code Playgroud)
我也尝试使用of而不是in......仍然没有结果.我收到一条消息 var2 not found,它就不再执行了.是否capture必须加上前缀foreach?我试过......没用?
这有点微妙.
鉴于var2不存在,Stata仍然被指示(在else分支内)
display `var' "DOES NOT EXIST"
Run Code Online (Sandbox Code Playgroud)
这被解释为
display var2 "DOES NOT EXIST"
Run Code Online (Sandbox Code Playgroud)
所以,它首先看到了
display var2
Run Code Online (Sandbox Code Playgroud)
它倾向于解释为
display var2[1]
Run Code Online (Sandbox Code Playgroud)
- 第一次观察的价值 - 但正如所说的var2那样,并且Stata抱怨.
你想要的是显示名称var2,而不是它的内容(再一次,不存在),修复是简单的
else display "`var' DOES NOT EXIST"
Run Code Online (Sandbox Code Playgroud)
双引号分隔符的位置至关重要,以强制执行display不存在的事物的名称.不存在的事物的名称只是任意文本,Stata对此类文本没有任何问题.
总之,当喂到 display
"`macro'"
Run Code Online (Sandbox Code Playgroud)
是要显示的字符串,但是
`macro'
Run Code Online (Sandbox Code Playgroud)
是要显示的变量或标量的名称,或者是要显示已定义内容的宏.
顺便说一下,你的循环只是覆盖了之前存储的结果集,但可能你会在适当的时候得到它.