根据现有变量计算 Stata 中的新变量

Computing a new variable in Stata based on existing variables

我不太精通 Stata,我正在努力寻找正确的语法来根据其他几个变量的属性生成新变量。

我有一个表示性别的虚拟变量 (Sex_at_birth),以及 3 个表示性取向的虚拟变量 (isHEisBIisHO)。我想创建 3 个虚拟变量来指示性偏好 (likesMENlikesWOMENlikesBOTH)。

我想使用的示例逻辑语句是:

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 |
    +------------------------------------------+