【问题标题】:Computing a new variable in Stata based on existing variables根据现有变量计算Stata中的新变量
【发布时间】:2018-05-05 10:25:20
【问题描述】:

我并不精通 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 个类别的变量,并且在进行分析时我会记住这一点。但是,对于我的数据集,我希望对所有类别进行虚拟编码(因此我可以选择在分析中省略哪一个)。

【问题讨论】:

    标签: variables stata generate


    【解决方案1】:

    请始终向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 会自动在满足条件的任何地方放置 1,在不满足条件的地方自动放置 0,在新变量中。
    • 请记住使用双等号 == 来测试是否相等,其余的由 Stata 完成。
    • 我实际上知道 Stata 在逻辑语句中使用 == 表示“等于”,我在我的问题中不是在写一个 stata 代码,而是一个我想翻译成 Stata 代码的逻辑语句。跨度>
    猜你喜欢
    • 2019-04-16
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多