Stata:将多个变量合并为一个
Stata: combine multiple variables into one
我在 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 个这样的变量,我想将它们组合成一个变量,所以也许有一种有效的方法可以做到这一点。
您可以遍历变量,将新变量替换为其他变量的非缺失值。这是假设您的变量是字符串。 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)
根据您的示例,这意味着每次观察中最多不缺少一个数值变量和一个变量,egen
的 rowmax()
函数就是您所需要的。
egen d = rowmax(a b c)
我在 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 个这样的变量,我想将它们组合成一个变量,所以也许有一种有效的方法可以做到这一点。
您可以遍历变量,将新变量替换为其他变量的非缺失值。这是假设您的变量是字符串。 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)
根据您的示例,这意味着每次观察中最多不缺少一个数值变量和一个变量,egen
的 rowmax()
函数就是您所需要的。
egen d = rowmax(a b c)