【问题标题】:Is there a way to get the variable type?有没有办法获取变量类型?
【发布时间】:2021-11-18 08:10:44
【问题描述】:

我想在 Stata 中提取分类变量,但似乎我做的不对。有线索吗?

* Pull out variables with value labels 

sysuse auto
label dir 

local catvars = r(names)

foreach var of varlist _all{
    if `var' in `catvars'{
        di "`var'"
    }
}

【问题讨论】:

  • 这为您提供了值标签名称的列表(每组一个名称)。当且仅当具有值标签的变量都具有与变量同名的值标签时,它将给出正确的答案,这对于某些数据集是正确的,但在任何意义上都不是强制性的。在这种情况下,变量foreign 具有值标签origin,因此代码完全无法执行您想要的操作。

标签: stata


【解决方案1】:

如果分类变量的标准是它具有值标签,那么ds 是最简单的工具:

. sysuse auto, clear
(1978 automobile data)

. ds, has(vallabel)
foreign

ds 在r(varlist) 中返回这些变量的列表(这里只有一个)。

ds 是官方命令。刚刚使用的特定语法,选项has(),是我在社区贡献的命令中添加的,后来折叠回随Stata本身分发的内容(这就是“官方”在这里的意思)。

Stata Journal 中的

findname 具有相同的功能,甚至更多。它是我作为ds 的扩展编写的。在某些情况下。至于这个问题,语法不同,代表我对什么是干净的第二个想法,但用户自然可能不同意。

. findname, vallabel
foreign

标题中的一般问题也可以回答。 help macro 是各种低级工具文档的门户,本质上强调了ds 和findname 所做的大部分工作,只是为了方便。 findname 现在还使用了一些在 Stata 本身中不直接匹配的 Mata 功能。 findname 的额外选项之一是local() 将findname 的结果直接放入本地宏中; ds 中没有这样的选项。

【讨论】:

  • 谢谢@Nick,如果我想在一个 forloop 中对 Stata 中的每个分类变量应用函数呢?
  • 主要技术是您已经知道的,将名称复制到 local 宏,然后遍历该列表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多