【问题标题】:Taking advantage of the name of a variable in Stata利用Stata中的变量名称
【发布时间】:2016-09-14 23:36:07
【问题描述】:

我正在使用 Stata,我有一组变量名为 cal1cal2cal3 等等,直到 cal21。对于我的数据集的每一行,我可以有或多或少的cal* 变量作为非缺失(我用reshape wide 设计了数据集)。我想生成一个新变量,它返回变量cal* 的最大名称,该名称可用于每一行非缺失。例如,如果第 1 行直到 cal3 为非缺失,则此变量返回 cal3;对于第 2 行,如果我有 cal1cal2cal6,我想要 cal6。有没有办法做到这一点?

【问题讨论】:

  • 不要在 Stata 中这样做
  • 最直接的方法是在 reshape 之前计算它。然后,不要进行广泛的重塑,因为有经验的 Stata 用户普遍认为,除了少数例外,Stata 可以更直接地完成复杂的分析,甚至像您正在尝试的简单任务,使用较长的数据布局而不是比相同数据的广泛布局。
  • @Noobie 如果您给出理由,该评论可能会有所帮助或有趣。
  • 一个明确的数据示例和一些代码尝试是好的问题。问题的标题并不能真正说明问题的性质,即在每个观察中找到最后一个非缺失变量。系统命名使它更容易一些,但这不是问题的核心。

标签: string variables stata


【解决方案1】:

对于长格式布局的数据,这将更容易实现,但对于宽数据也可以通过循环实现:

gen max_cal = "none"
forvalues v=1/21 {
    replace max_cal = "cal`v'" if !missing(cal`v')
}

这将更新max_cal 变量,每次没有丢失更高的变量。

【讨论】:

  • "format" 在 Stata 中过载(显然不是你的错!)。有经验的 Stata 用户会立刻认出你在说什么,但我喜欢 Clyde Schechter 提到的长布局和宽布局的例子。
  • 请注意,如果变量名称不规则,我们将使用foreach
  • @NickCox 一个很好的观点。我认为这些词的列表将成为一个很好的常见问题解答。
  • @L.Vaiz 接受 DImitriy 的回答,如果这对他和您的声誉都有好处。否则,您应该标记任何剩余的困难。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多