【问题标题】:Stata: combine multiple variables into oneStata:将多个变量合二为一
【发布时间】:2023-03-20 09:44:01
【问题描述】:

我在 Stata 中遇到问题。我想要做的是将多个变量合并为一个。我的数据如下所示(简化):

ID a b c
1  x . .
2  y . .
3  . z .
4  . w .
5  . . u

现在我想生成一个新变量d,由变量abc的所有值组成,这样d就没有缺失值:

ID a b c d
1  x . . x
2  y . . y
3  . z . z
4  . w . w
5  . . u u

我尝试使用命令stack a b c, into(d),但随后Stata 警告我数据将丢失,我的数据剩下的只是堆叠变量,没有别的。是否有另一种方法可以在不重命名变量abc 的情况下做到这一点?

我的数据集包含大约 90 个这样的变量,我想将它们组合成一个变量,所以也许有一种有效的方法来做到这一点。

【问题讨论】:

    标签: variables stack combinations stata


    【解决方案1】:

    从您的示例中,这意味着数字变量和每个观察中最多不缺少一个变量,egenrowmax() 函数就是您所需要的。

    egen d = rowmax(a b c)
    

    【讨论】:

      【解决方案2】:

      您可以遍历变量,将新变量替换为其他变量的非缺失值。这是假设您的变量是字符串。 Nick 的解决方案更适用于数值变量。

      clear
      input ID str5(a b c)
      1  x "" ""
      2  y "" ""
      3  "" z ""
      4  "" w ""
      5  "" "" u
      end
      gen d=""
      foreach v of varlist a-c {
       replace d=`v' if mi(d)
      }
      li
      

      【讨论】:

      • 感谢您发布此问题的答案!在 Stack Overflow 上不鼓励仅使用代码的答案,因为没有上下文的代码转储无法解释解决方案的工作方式或原因,这使得原始发布者(或任何未来的读者)难以理解其背后的逻辑。请编辑您的问题并包含对您的代码的解释,以便其他人可以从您的回答中受益。谢谢!
      • 如果所有变量都是字符串,如本例中egenconcat()函数是一个替代方案。
      【解决方案3】:

      您可以像以前一样使用stack,同时指定wide 选项:

      clear
      input ID str5(a b c)
      1  x "" ""
      2  y "" ""
      3  "" z ""
      4  "" w ""
      5  "" "" u
      end
      
      stack a b c, into(d) wide clear
      keep if !mi(d)
      

      【讨论】:

        猜你喜欢
        • 2019-11-06
        • 1970-01-01
        • 2020-12-08
        • 2016-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-22
        • 1970-01-01
        相关资源
        最近更新 更多