如何让Stata的语法命令忽略varlist中不存在的变量?

时间:2015-04-23 16:50:00

标签: stata

假设在Stata中我想定义一个程序:

capture program drop myprg
program define myprg
  syntax varlist

  foreach var of varlist `varlist' {
     disp "`var'"
  }
end

我希望我的程序能够接受我的数据集中存在的变量名称和不存在的变量的名称。如果变量存在,则显示名称。否则,它什么都不做。

假设我的数据集有两个变量:age1age2。目前的输出是:

. myprg age1
age1

. myprg age*
age1
age2

. myprg varThatDoesntExist
variable varThatDoesntExist not found
r(111);

相反,最后一个命令的所需输出是:

. myprg varThatDoesntExist

.

如何获得此功能?

1 个答案:

答案 0 :(得分:3)

请参阅help syntax。规范namelist通用varlist来打印出任何名称,现有和合法变量名称。

program myprg
  syntax namelist 

  foreach var of local namelist {
     disp "`var'"
  }
end

首次发布此问题后请求的变体是打印实际变量名称并忽略其他任何内容。为此,您需要设置自己的解析。再次,请参阅help syntax。你需要像

这样的东西
program myprg
    version 8.2 
    syntax anything 

    local varlist 
    foreach thing of local anything {
        capture unab Thing : `thing'  
        if _rc == 0 local varlist `varlist' `Thing'  
    }

    foreach v of local varlist { 
        di `"`v'"'  
    } 
end