Stata 检查varlist是否包含因子变量?

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

我试图检查我的程序中的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 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)是否是
语法的产物,因此这确实有助于澄清宏是如何工作的。