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