我在Stata遇到了问题。我想要做的是将多个变量合并为一个。我的数据如下(简化):
ID a b c
1 x . .
2 y . .
3 . z .
4 . w .
5 . . u
现在我想要生成一个新变量d
,其中包含变量a
,b
和c
的所有值,这样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向我发出警告,数据将丢失,我的数据剩余部分只是堆叠变量而没有其他内容。是否有其他方法可以在不重命名变量a
,b
和c
的情况下执行此操作?
我的数据集包含大约90个这些变量,我想将它们组合成一个变量,所以可能有一种有效的方法。
答案 0 :(得分:2)
您可以循环变量,将新变量替换为其他变量的非缺失值。这假设您的变量是字符串。尼克的解决方案更适合数值变量。
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
答案 1 :(得分:2)
在您的示例中,这意味着数字变量,并且每次观察中最多只有一个变量不丢失,egen
的{{1}}函数就是您所需要的。
rowmax()