【问题标题】:Checking variables' existence using Stata使用Stata检查变量的存在
【发布时间】:2013-06-02 17:26:22
【问题描述】:

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

【问题讨论】:

    标签: loops capture stata


    【解决方案1】:

    这有点微妙。

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-02-10
      • 1970-01-01
      • 2014-02-07
      • 2014-04-29
      • 2011-03-12
      • 2011-01-10
      • 1970-01-01
      • 2014-09-08
      相关资源
      最近更新 更多