如何让Stata';s syntax命令忽略varlist中不存在的变量?

如何让Stata';s syntax命令忽略varlist中不存在的变量?,stata,Stata,假设在Stata中,我希望定义一个程序: capture program drop myprg program define myprg syntax varlist foreach var of varlist `varlist' { disp "`var'" } end 我希望我的程序能够接受数据集中存在的变量名和不存在的变量名。如果变量存在,它将显示名称。否则,它将一事无成 假设我的数据集有两个变量:age1和age2。电流输出为: . myprg age1 ag

假设在Stata中,我希望定义一个程序:

capture program drop myprg
program define myprg
  syntax varlist

  foreach var of varlist `varlist' {
     disp "`var'"
  }
end
我希望我的程序能够接受数据集中存在的变量名和不存在的变量名。如果变量存在,它将显示名称。否则,它将一事无成

假设我的数据集有两个变量:
age1
age2
。电流输出为:

. myprg age1
age1

. myprg age*
age1
age2

. myprg varThatDoesntExist
variable varThatDoesntExist not found
r(111);
相反,最后一个命令的所需输出为:

. myprg varThatDoesntExist

.

如何获得此功能?

有关
语法的信息,请参阅
帮助。规范
namelist
概括了
varlist
以打印出任何名称、现有的和合法的变量名称

program myprg
  syntax namelist 

  foreach var of local namelist {
     disp "`var'"
  }
end
在第一次发布这个问题后,要求的一个变体是打印实际的变量名,而忽略任何其他内容。为此,您需要设置自己的解析。关于
语法
,请再次参阅
帮助
。你需要像这样的东西

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

谢谢一个细节-如果我的数据集中有变量
var1
var2
,那么我可以成功地将
var*
传递到
syntax varlist
,而
syntax namelist
报告:
*无效名称
。知道怎么解决吗?不仅仅是一个细节!我将扩展答案。@Keith不是这样
confirm
不会解压缩通配符,
display
需要通配符才能在此处正常工作。