Stata 用零值对变量进行分类

Stata 用零值对变量进行分类,stata,Stata,尝试将82个值的变量X分类为0,118个值介于1和6之间,0个值介于7和12之间,0个值介于13和18之间,0个值介于19和24之间 尝试了以下代码: gen X = . replace X = 1 if Y >= 1 & Y <= 6 replace X = 2 if Y >= 7 & Y <= 12 replace X = 3 if Y >= 13 & Y <= 18 replace X = 4 if Y >= 19 &

尝试将82个值的变量X分类为0,118个值介于1和6之间,0个值介于7和12之间,0个值介于13和18之间,0个值介于19和24之间

尝试了以下代码:

gen X = .
replace X = 1 if Y >= 1 & Y <= 6
replace X = 2 if Y >= 7 & Y <= 12
replace X = 3 if Y >= 13 & Y <= 18
replace X = 4 if Y >= 19 & Y <= 24
  • 您的代码确实用于您的目的,即变量
    X
    确实是变量
    Y
    的正确类别集

  • 在0,1范围内只看到
    X
    ,这一事实仅仅意味着数据没有
    观察值
    ,而
    Y
    属于其他类别。如果数据中有任何
    Y
    属于其他类别,则会显示
    X
    的正确对应值

  • 实现此输出的直接方法如下所示。试试看

    egen YCat = cut(Y), at(0,1,7,13,19,25)
    
  • 您的代码确实用于您的目的,即变量
    X
    确实是变量
    Y
    的正确类别集

  • 在0,1范围内只看到
    X
    ,这一事实仅仅意味着数据没有
    观察值
    ,而
    Y
    属于其他类别。如果数据中有任何
    Y
    属于其他类别,则会显示
    X
    的正确对应值

  • 实现此输出的直接方法如下所示。试试看

    egen YCat = cut(Y), at(0,1,7,13,19,25)
    

  • 您的代码看起来不错,但关键的是,代码中没有任何内容会产生0

    但是,我不同意@Romalpa Akzo推荐
    egen,cut()
    。即使是有经验的Stata用户也不太可能记住该命令功能所使用的确切规则。 尤其是下限是
    =
    还是
    ?在上述极值的上方和下方会发生什么?如果你不想让结果上升怎么办

    我更喜欢显式代码

    这里有另一种方法。如果程序员理解
    cond(a,B,C)
    产生
    B
    如果
    a
    为真(非零)而
    C
    如果
    a
    为假(零),那么我们就可以走了

    clear 
    set obs 26 
    generate Y = _n - 1 
    
    generate X = cond(Y > 24, .,     ///
            cond(Y >= 19, 4,    ///
            cond(Y >= 13, 3,    ///
            cond(Y >= 7, 2,     ///
            cond(Y >= 1, 1, 0   ))))) 
    
    tabulate Y X , missing  
    
    
               |                                 X
             Y |         0          1          2          3          4          . |     Total
    -----------+------------------------------------------------------------------+----------
             0 |         1          0          0          0          0          0 |         1 
             1 |         0          1          0          0          0          0 |         1 
             2 |         0          1          0          0          0          0 |         1 
             3 |         0          1          0          0          0          0 |         1 
             4 |         0          1          0          0          0          0 |         1 
             5 |         0          1          0          0          0          0 |         1 
             6 |         0          1          0          0          0          0 |         1 
             7 |         0          0          1          0          0          0 |         1 
             8 |         0          0          1          0          0          0 |         1 
             9 |         0          0          1          0          0          0 |         1 
            10 |         0          0          1          0          0          0 |         1 
            11 |         0          0          1          0          0          0 |         1 
            12 |         0          0          1          0          0          0 |         1 
            13 |         0          0          0          1          0          0 |         1 
            14 |         0          0          0          1          0          0 |         1 
            15 |         0          0          0          1          0          0 |         1 
            16 |         0          0          0          1          0          0 |         1 
            17 |         0          0          0          1          0          0 |         1 
            18 |         0          0          0          1          0          0 |         1 
            19 |         0          0          0          0          1          0 |         1 
            20 |         0          0          0          0          1          0 |         1 
            21 |         0          0          0          0          1          0 |         1 
            22 |         0          0          0          0          1          0 |         1 
            23 |         0          0          0          0          1          0 |         1 
            24 |         0          0          0          0          1          0 |         1 
            25 |         0          0          0          0          0          1 |         1 
    -----------+------------------------------------------------------------------+----------
         Total |         1          6          6          6          6          1 |        26 
    
    当然,您可以在一行上编写所有命令,但许多人会发现多行布局更易于理解和调试。对于嵌套函数调用,每个新条件都意味着承诺在末尾关闭所有括号


    许多Stata用户也喜欢使用问题中提到的多个命令,因此许多选择背后都有味觉

    您的代码看起来不错,但关键的是,代码中没有任何内容会产生0

    但是,我不同意@Romalpa Akzo推荐
    egen,cut()
    。即使是有经验的Stata用户也不太可能记住该命令功能所使用的确切规则。 尤其是下限是
    =
    还是
    ?在上述极值的上方和下方会发生什么?如果你不想让结果上升怎么办

    我更喜欢显式代码

    这里有另一种方法。如果程序员理解
    cond(a,B,C)
    产生
    B
    如果
    a
    为真(非零)而
    C
    如果
    a
    为假(零),那么我们就可以走了

    clear 
    set obs 26 
    generate Y = _n - 1 
    
    generate X = cond(Y > 24, .,     ///
            cond(Y >= 19, 4,    ///
            cond(Y >= 13, 3,    ///
            cond(Y >= 7, 2,     ///
            cond(Y >= 1, 1, 0   ))))) 
    
    tabulate Y X , missing  
    
    
               |                                 X
             Y |         0          1          2          3          4          . |     Total
    -----------+------------------------------------------------------------------+----------
             0 |         1          0          0          0          0          0 |         1 
             1 |         0          1          0          0          0          0 |         1 
             2 |         0          1          0          0          0          0 |         1 
             3 |         0          1          0          0          0          0 |         1 
             4 |         0          1          0          0          0          0 |         1 
             5 |         0          1          0          0          0          0 |         1 
             6 |         0          1          0          0          0          0 |         1 
             7 |         0          0          1          0          0          0 |         1 
             8 |         0          0          1          0          0          0 |         1 
             9 |         0          0          1          0          0          0 |         1 
            10 |         0          0          1          0          0          0 |         1 
            11 |         0          0          1          0          0          0 |         1 
            12 |         0          0          1          0          0          0 |         1 
            13 |         0          0          0          1          0          0 |         1 
            14 |         0          0          0          1          0          0 |         1 
            15 |         0          0          0          1          0          0 |         1 
            16 |         0          0          0          1          0          0 |         1 
            17 |         0          0          0          1          0          0 |         1 
            18 |         0          0          0          1          0          0 |         1 
            19 |         0          0          0          0          1          0 |         1 
            20 |         0          0          0          0          1          0 |         1 
            21 |         0          0          0          0          1          0 |         1 
            22 |         0          0          0          0          1          0 |         1 
            23 |         0          0          0          0          1          0 |         1 
            24 |         0          0          0          0          1          0 |         1 
            25 |         0          0          0          0          0          1 |         1 
    -----------+------------------------------------------------------------------+----------
         Total |         1          6          6          6          6          1 |        26 
    
    当然,您可以在一行上编写所有命令,但许多人会发现多行布局更易于理解和调试。对于嵌套函数调用,每个新条件都意味着承诺在末尾关闭所有括号


    许多Stata用户也喜欢使用问题中提到的多个命令,因此许多选择背后都有味觉

    如果我是诚实的,我不清楚你想要什么。嗨,我想把X分为5类,标记为0,1,2,3,4。其中,X=0,如果Y=0,如果Y在1和6之间,X=1,如果Y在7和12之间,X=2,如果Y在13和18之间,X=3,如果Y在19和24之间,X=4。但是由于我的Y值都不超过6,上面的代码显示了X被分类为0,1,而不是X被分类为0,1,2,3,4。希望有帮助。当你说Y是否在1到6之间时,你是指数值还是观察值?如果是指数值,你的问题就没有意义了。在这种情况下,如果类别2和类别4都为0,您如何区分它们?不用担心。感谢您的时间,我发现如果这些类别中的所有值都为零,它不会显示类别。如果我诚实,我不清楚您想要什么。嗨,我想将X分类为5个类别,标记为0,1,2,3,4。其中,X=0,如果Y=0,如果Y在1和6之间,X=1,如果Y在7和12之间,X=2,如果Y在13和18之间,X=3,如果Y在19和24之间,X=4。但是由于我的Y值都不超过6,上面的代码显示了X被分类为0,1,而不是X被分类为0,1,2,3,4。希望有帮助。当你说Y是否在1到6之间时,你是指数值还是观察值?如果是指数值,你的问题就没有意义了。在这种情况下,如果类别2和类别4都为0,您如何区分它们?不用担心。谢谢你的时间,我发现如果类别中的所有值都为零,它就不会显示类别。非常感谢尼克·考克斯老师,谢谢你的完美版本。非常感谢尼克·考克斯老师,谢谢你的完美版本。