我不太熟悉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个类别的变量,在进行分析时我会考虑到这一点。但是对于我的数据集,我希望所有类别都是虚拟编码的(因此我可以选择省略哪一个用于我的分析)。
答案 0 :(得分:2)
请始终提供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 |
+------------------------------------------+