如何让Stata的语法命令忽略varlist中不存在的变量?
How to let Stata's syntax command ignore non-existent variables in varlist?
假设我想在 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
.
如何获得此功能?
请参阅 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
假设我想在 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
.
如何获得此功能?
请参阅 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