Stata 检查varlist是否包含因子变量?
我试图检查我的程序中的varlist是否包含因子变量。我遵循StataCorp在本页()中的建议。建议的代码为:Stata 检查varlist是否包含因子变量?,stata,Stata,我试图检查我的程序中的varlist是否包含因子变量。我遵循StataCorp在本页()中的建议。建议的代码为: syntax varlist(fv) local fvops = "`s(fvops)'" == "true" | _caller() >= 11 if `fvops' { // within this loop, you can expand the factor variable list, // create a local for version con
syntax varlist(fv)
local fvops = "`s(fvops)'" == "true" | _caller() >= 11
if `fvops' {
// within this loop, you can expand the factor variable list,
// create a local for version control and perform any other
// steps needed for factor operated varlists
}
然而,现在我觉得宏s(fvops)
并没有真正检查varlist中因子变量的存在。一个简单的例子来说明:
capture program drop test_fvops
program test_fvops
syntax varlist(fv)
local fvops = "`s(fvops)'" == "true" | _caller() >= 11
qui reg `varlist'
if `fvops' {
di "factor variables specified"
}
else {
di "factor variables not specified"
}
end
sysuse auto,clear
test_fvops price mpg foreign weight i.rep78
test_fvops price mpg foreign weight rep78
奇怪的是,代码的最后两行都返回“指定的因子变量”。程序无法判断第二行没有因子变量
进一步探究宏s(fvops)
的属性只会让我更加困惑
sysuse auto,clear
qui reg price mpg foreign weight i.rep78
local fvops = "`s(fvops)'" != "true" | _caller() >= 11
di "|s(fvops)=`s(fvops)'|fvops=`fvops'|"
qui reg price mpg foreign weight rep78
local fvops = "`s(fvops)'" != "true" | _caller() >= 11
di "|s(fvops)=`s(fvops)'|fvops=`fvops'|"
在这两种情况下,s(fvops)
为空,但fvops
为1。我还试图返回列表
和返回列表
,但没有看到s(fvops)
我是否正确使用了fvops
代码?我正在和Stata 13一起运行Win 7
增加:
尼克的评论澄清了我在手册中找不到的东西。因此基本上不应该包括\u caller()
段,而链接页面中的这段引用正是我需要了解的s(fvops)
要检查变量列表中是否指定了因子变量,可以使用语法中保存的宏s(fvops)
,当指定因子变量>时,该宏将等于“true”,否则为空
使用您自己的程序:您正在使用Stata 13,并且您的程序不会将
版本设置为任何其他内容
因此,\u caller()
在这两种情况下都大于11,并且您的测试不是测试
为什么不直接显示s(fvops)
对于后面的代码,您的“进一步探索”:为什么期望s(fvops)
可见?您从未创建过它,因为您没有使用语法
。但是本地宏fvops
是1,原因相同:\u caller()
大于11,并且|
操作符选择1 太好了!谢谢你指出版本问题——我应该注意到这一点。我也不确定s(fvops)是否是语法的产物,因此这确实有助于澄清宏是如何工作的。