如何在Stata中获取变量类型并正确提取分类变量?
Stata获取变量类型及提取分类变量的方法
你现有代码的核心错误是:label dir返回的r(names)是值标签的名称集合,而非绑定了值标签的变量名,同时Stata的in运算符不支持你这种局部宏文本匹配的写法,所以无法得到正确结果。
可行解决思路
方法1:通过值标签绑定关系提取分类变量(最常用)
Stata中分类变量一般都会绑定值标签,你可以直接遍历所有变量,检查每个变量是否绑定了值标签来筛选:
sysuse auto, clear local catvars "" foreach var of varlist _all { * 获取当前变量绑定的值标签名 local val_label : value label `var' * 存在值标签则判定为分类变量 if "`val_label'" != "" { di "`var'" local catvars `catvars' `var' } } * 最终catvars宏存储了所有分类变量名 di "所有分类变量:`catvars'"
方法2:结合变量类型和取值数量自定义筛选规则
如果你需要更灵活的分类变量判定规则,可以搭配变量类型查询、取值数量判断来实现:
- 调用
local var_type : typevar'可获取变量存储类型,返回结果以str`开头为字符型变量,其余为数值型变量 - 若要按取值数量筛选,可先安装
distinct命令(ssc install distinct),调用后返回的r(ndistinct)为变量的唯一取值数量,你可以自行设定阈值判断是否为分类变量,示例:
sysuse auto, clear local catvars "" foreach var of varlist _all { qui distinct `var' * 唯一取值数小于样本量10%判定为分类变量 if r(ndistinct) < _N * 0.1 { local catvars `catvars' `var' } } di "所有分类变量:`catvars'"
内容的提问来源于stack exchange,提问作者Moses
相关产品推荐
相关产品推荐

