Um caminho no Stata:
clear all
set more off
*----- example data -----
input ///
country year law
1 1996 235
1 1997 25
1 1998 6445
2 1996 436
2 1997 2356
2 1998 224
3 1996 3129
3 1997 735
3 1998 836
end
list, sepby(country)
*----- what you want -----
sort year law
by year: gen ahead = _N - _n
by year: gen behind = _n - 1
sort country year
list, sepby(country)
Algumas suposições são feitas, é claro.
Editar
A estratégia é muito simples. Classifique os dados por year law
. O resultado é:
. list, sepby(year)
+-----------------------+
| country year law |
|-----------------------|
1. | 1 1996 235 |
2. | 2 1996 436 |
3. | 3 1996 3129 |
|-----------------------|
4. | 1 1997 25 |
5. | 3 1997 735 |
6. | 2 1997 2356 |
|-----------------------|
7. | 2 1998 224 |
8. | 3 1998 836 |
9. | 1 1998 6445 |
+-----------------------+
Agora só precisamos perceber que, para cada grupo year
, a primeira observação (ie observações 1, 4 e 7) é superada por duas outras observações (ie obs 1 é ultrapassada por 2, 3; obs 4 é ultrapassado por 5, 6 e obs 7 é superado por 8, 9). Isto significa que existem duas observações que são ahead
das observações 1, 4, 7.
Em seguida, por cada grupo year
, a segunda observação (ou seja, observações 2, 5 e 8) é superada por uma outra observação. Isto significa que há uma observação ahead
das observações 2, 5, 8.
Finalmente, por cada grupo year
, a terceira observação (ou seja, observações 3, 6 e 9) é superada por zero outras observações. Isso significa que há zero observações ahead
das observações 3, 6, 9.
Agora, vemos que, depois de apropriadamente sort
ing os dados, por year
group, precisamos apenas criar a sequência two, one, zero , para a variável ahead
. Isto pode ser feito de várias maneiras. Eu escolhi fazê-lo usando subscrição (consulte help subscripting
) e as variáveis do sistema _n
e _N
(consulte help _variables
). _N
é o número total de observações por grupo (3) e _n
é a observação atual por grupo. Um exemplo: para a observação 1, o cálculo é 3-1 = 2
. Para a observação 2, é 3-2 = 1
e assim por diante.
A variável behind
é calculada analogamente.
O resultado é:
+----------------------------------------+
| country year law ahead behind |
|----------------------------------------|
1. | 1 1996 235 2 0 |
2. | 2 1996 436 1 1 |
3. | 3 1996 3129 0 2 |
|----------------------------------------|
4. | 1 1997 25 2 0 |
5. | 3 1997 735 1 1 |
6. | 2 1997 2356 0 2 |
|----------------------------------------|
7. | 2 1998 224 2 0 |
8. | 3 1998 836 1 1 |
9. | 1 1998 6445 0 2 |
+----------------------------------------+
No meu código, depois de calcular as novas variáveis, eu sort
apenas para apresentar os dados em sua ordem de classificação original ( country year
).