Stata:将多个变量合并为一个

Stata: combine multiple variables into one

我在 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 个这样的变量,我想将它们组合成一个变量,所以也许有一种有效的方法可以做到这一点。

您可以遍历变量,将新变量替换为其他变量的非缺失值。这是假设您的变量是字符串。 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,同时指定 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)

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

egen d = rowmax(a b c)