根据现有变量计算 Stata 中的新变量
Computing a new variable in Stata based on existing variables
我不太精通 Stata,我正在努力寻找正确的语法来根据其他几个变量的属性生成新变量。
我有一个表示性别的虚拟变量 (Sex_at_birth
),以及 3 个表示性取向的虚拟变量 (isHE
、isBI
、isHO
)。我想创建 3 个虚拟变量来指示性偏好 (likesMEN
、likesWOMEN
、likesBOTH
)。
我想使用的示例逻辑语句是:
likesMEN = 1 if ((Sex_at_birth = 1) & (isHE = 1)) | ((Sex_at_birth = 0) & (isHO = 1)),
else likesMEN =0
其他变量类似。
我不知道如何在 Stata 中编写代码,我相信对于熟悉该程序的人来说,这将是 2 秒。
注意:我知道我需要 n-1
个虚拟变量来编码具有 3 个类别的变量,在进行分析时我会记住这一点。然而,对于我的数据集,我希望对所有类别进行虚拟编码(这样我就可以选择在我的分析中忽略哪一个)。
请始终提供Minimal, Complete, and Verifiable example您的问题。
您只需要在表达式中使用 ==
而不是 =
:
clear
set obs 20
local varlist Sex_at_birth isHE isBI isHO
foreach var of local varlist {
generate random = runiform()
generate `var' = 0
replace `var' = 1 in 1/10
sort random
drop random
}
generate likesMEN = ( (Sex_at_birth == 1) & (isHE == 1) ) | ///
( (Sex_at_birth == 0) & (isHO == 1) )
然后你得到:
. list
+------------------------------------------+
| Sex_at~h isHE isBI isHO likesMEN |
|------------------------------------------|
1. | 0 1 1 0 0 |
2. | 0 0 0 1 1 |
3. | 0 1 0 1 1 |
4. | 1 0 0 1 0 |
5. | 0 1 1 1 1 |
|------------------------------------------|
6. | 1 1 1 1 1 |
7. | 1 0 1 0 0 |
8. | 1 0 1 0 0 |
9. | 1 0 0 1 0 |
10. | 0 1 1 0 0 |
|------------------------------------------|
11. | 1 0 0 0 0 |
12. | 0 1 1 0 0 |
13. | 0 0 0 1 1 |
14. | 0 1 0 1 1 |
15. | 1 0 0 0 0 |
|------------------------------------------|
16. | 1 1 0 1 1 |
17. | 1 1 1 0 1 |
18. | 1 1 1 0 1 |
19. | 0 0 0 0 0 |
20. | 0 0 1 1 1 |
+------------------------------------------+
我不太精通 Stata,我正在努力寻找正确的语法来根据其他几个变量的属性生成新变量。
我有一个表示性别的虚拟变量 (Sex_at_birth
),以及 3 个表示性取向的虚拟变量 (isHE
、isBI
、isHO
)。我想创建 3 个虚拟变量来指示性偏好 (likesMEN
、likesWOMEN
、likesBOTH
)。
我想使用的示例逻辑语句是:
likesMEN = 1 if ((Sex_at_birth = 1) & (isHE = 1)) | ((Sex_at_birth = 0) & (isHO = 1)),
else likesMEN =0
其他变量类似。
我不知道如何在 Stata 中编写代码,我相信对于熟悉该程序的人来说,这将是 2 秒。
注意:我知道我需要 n-1
个虚拟变量来编码具有 3 个类别的变量,在进行分析时我会记住这一点。然而,对于我的数据集,我希望对所有类别进行虚拟编码(这样我就可以选择在我的分析中忽略哪一个)。
请始终提供Minimal, Complete, and Verifiable example您的问题。
您只需要在表达式中使用 ==
而不是 =
:
clear
set obs 20
local varlist Sex_at_birth isHE isBI isHO
foreach var of local varlist {
generate random = runiform()
generate `var' = 0
replace `var' = 1 in 1/10
sort random
drop random
}
generate likesMEN = ( (Sex_at_birth == 1) & (isHE == 1) ) | ///
( (Sex_at_birth == 0) & (isHO == 1) )
然后你得到:
. list
+------------------------------------------+
| Sex_at~h isHE isBI isHO likesMEN |
|------------------------------------------|
1. | 0 1 1 0 0 |
2. | 0 0 0 1 1 |
3. | 0 1 0 1 1 |
4. | 1 0 0 1 0 |
5. | 0 1 1 1 1 |
|------------------------------------------|
6. | 1 1 1 1 1 |
7. | 1 0 1 0 0 |
8. | 1 0 1 0 0 |
9. | 1 0 0 1 0 |
10. | 0 1 1 0 0 |
|------------------------------------------|
11. | 1 0 0 0 0 |
12. | 0 1 1 0 0 |
13. | 0 0 0 1 1 |
14. | 0 1 0 1 1 |
15. | 1 0 0 0 0 |
|------------------------------------------|
16. | 1 1 0 1 1 |
17. | 1 1 1 0 1 |
18. | 1 1 1 0 1 |
19. | 0 0 0 0 0 |
20. | 0 0 1 1 1 |
+------------------------------------------+