基于现有变量在Stata中计算新变量

时间:2018-05-05 10:25:20

标签: variables stata generate

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

1 个答案:

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