Категоризация переменной с нулевыми значениями - PullRequest
0 голосов
/ 26 июня 2019

Попытка классифицировать переменную X, которая имеет 82 значения как 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

Хотелось бы, чтобы Х классифицировался как 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 ]

1 голос
/ 27 июня 2019

Ваш код выглядит нормально, за исключением того, что ничего в вашем коде не дает 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 предпочитают использовать несколько команд, подобных тем, о которых идет речь, поэтому вкус стоит за многими вариантами.

1 голос
/ 27 июня 2019
  1. Ваш код служит вашим целям, то есть переменная X действительно является правильным набором категорий для переменной Y, как вы и предполагали.

  2. Тот факт, что вы видите только X в диапазоне 0,1, просто означает, что данные имеют no observations с Y, попадающими в другие категории. Если бы данные имели Y, принадлежащую другим категориям, то отобразились бы правильные соответствующие значения X.

  3. Прямой способ достижения этого результата показан ниже. Просто попробуйте.

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