2017-06-22 87 views
0

在我创建的Stata程序中,我需要知道程序参数是否是因子变量。确定varname是否是因子变量

program define my_program, rclass 

    syntax varname(fv) 

    if ... { 
     display "`varlist' is a factor variable" 
    } else { 
     display "`varlist' is NOT a factor variable" 
    } 

    ... 

end 

my_program age 
my_program i.gender 

我该如何编写if条件来完成这项工作?我宁愿在不检查varname是否以“i”开头的情况下使其工作。 Stata知道这是否是一个因素变量,因为Stata提供了“fv”选项(即varname(fv))。那么,如何利用Stata内置的功能来确定呢?

谢谢!

回答

0

我对下面显示的代码感到尴尬,但它通过比较应用于变量列表的unabfvunab的结果为您指出了解决方案的方向。

. sysuse auto, clear 
(1978 Automobile Data) 

. capture unab mac_unab : i.foreign 

. display _rc 
101 

. capture fvunab mac_unab : i.foreign 

. display _rc 
0 

. capture tsunab mac_unab : i.foreign 

. display _rc 
101 

. 
0

我发现语法返回一个宏S(fvops),“当因子变量指定和空否则这将是等于‘真’。” (http://www.stata.com/support/faqs/programming/factor-variable-support/

因此,我能够实现我想用下面的代码:

program define is_categorical, rclass 

    syntax varname(fv) 

    return scalar is_categorical = ("`s(fvops)'" == "true") 

end 

is_categorical i.education_level