用零值分类变量

时间:2019-06-26 18:58:21

标签: stata

尝试对变量X进行分类,该变量的值为82,值为0,介于1和6之间的值为118,介于7和12之间的值为0,介于13和18之间的值为0,介于19和24之间的值为0。

尝试以下代码:

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分为0、1-6、7-12、13-18、19-24。而不只是0和1。 当前结果:

tab X

        X   Freq.   Percent Cum.

        0   82  41.00   41.00
        1   118 59.00   100.00

        Total   200 100.00


* Example generated by -dataex-. To install: ssc install dataex
clear
input int FID byte Y float X
150 0 0
 17 0 0
 95 1 1
  0 0 0
 18 0 0
  1 0 0
 96 0 0
 54 0 0
172 3 1
 97 0 0
 57 1 1
 19 0 0
 98 1 1
151 0 0
 99 1 1
  2 3 1
197 1 1
 55 2 1
 58 1 1
100 0 0
end

2 个答案:

答案 0 :(得分:1)

  1. 您的代码确实为您服务,也就是说,变量X确实是您想要的变量Y的正确类别集。

  2. 您仅看到X在0.1范围内的事实,仅意味着数据具有no observations,其中Y属于其他类别。如果数据中有属于其他类别的Y,则将显示X的正确对应值。

  3. 实现此输出的直接方法如下所示。只需尝试一下。

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

答案 1 :(得分:1)

您的代码看起来不错,但至关重要的是,代码中的任何内容都不会产生0

但是,我不同意@Romalpa Akzo关于推荐egen, cut()的意见。即使是经验丰富的Stata用户,也不太可能记住该命令功能所使用的确切规则。 下限是>=还是>?在上述极限值之上和之下发生了什么?如果您不希望结果增加1怎么办?

我更喜欢显式代码。

这是另一种方式。根据程序员的理解,如果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用户也喜欢使用类似问题中的多个命令,因此在很多选择背后都存在品味。