loops - 使用 Stata 检查变量是否存在

标签 loops capture stata

我已经问了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 前加上前缀?我试过了...没有用?

最佳答案

这有点微妙。

鉴于 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"

双引号定界符的位置是至关重要的,以强制显示 不存在的事物的名称。不存在的事物的名称只是任意文本,Stata 对这样的文本没有问题。

简而言之,当馈送到display

  "`macro'" 

是要显示的字符串,但是

 `macro' 

是要显示的变量或标量的名称,或者是具有要显示的已定义内容的宏。

顺便说一下,您的循环只是覆盖了先前的一组存储结果,但大概您会在适当的时候得到它。

关于loops - 使用 Stata 检查变量是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16885356/

相关文章:

Java 程序。如何在数组中循环“isLucky 方法?”以及如何在 main 方法中打印结果?

ios - 将捕获的图像添加到下一个 View Swift 3 Xcode 8

stata - 如何导出表格

stata - 使用移动时间窗口计算运行总和

arrays - Kotlin forEach 订单

带有定期中断的java while循环收到内存不足异常

arrays - 是否可以将 bash 数组作为变量传递给 awk?

java-me - 我可以使用 j2me 应用程序截取手机屏幕截图吗?

java - 宏记录器/播放器

variables - 平衡面板数据中的时间趋势变量,Stata