Come posso creare un conteggio finale per i dati binari in Stata?
-
20-12-2019 - |
Domanda
In Stata, attualmente ho un set di dati che sembra:
Sto cercando di creare un "contatore finale" nella colonna B in modo che sia simile a:
Qui, il contatore inizia a 1 e per ogni volta che viene visualizzato un "1" in A, B aggiunge su un valore.
Questo sembra essere molto semplice, ma non sono sicuro di come farlo esattamente.Ecco cosa ho fatto finora:
Supponendo che la colonna A si chiama "A" in Stata,
I Uso:
gen B = A + A[_n - 1]
.
Ma questo mi dà qualcosa.Non sono sicuro di come procedere, qualcuno avrebbe qualcuno?
Soluzione
Ecco un modo:
clear all
set more off
*----- example data -----
input ///
var1
0
0
0
0
1
0
0
1
0
0
0
end
list, sep(0)
*----- what you want -----
gen counter = sum(var1) + 1
list, sep(0)
.
La funzione sum()
ti darà una somma cumulativa. Vedi help sum()
. Questa è una funzione di stata molto semplice. Un search sum
ti avrebbe ottenuto lì rapidamente.
Il tuo approccio non riesce perché si sta solo aggiungendo, per ogni osservazione, il valore "corrente" del A
con il valore precedente di se stesso. Quella potrebbe suonare come una somma cumulativa, ma ci pensa e vedrai che non lo è.
Con il tuo codice e i miei dati, il risultato sarebbe:
+----------------+
| var1 counter |
|----------------|
1. | 0 . |
2. | 0 0 |
3. | 0 0 |
4. | 0 0 |
5. | 1 1 |
6. | 0 1 |
7. | 0 0 |
8. | 1 1 |
9. | 0 1 |
10. | 0 0 |
11. | 0 0 |
+----------------+
.
Manca la prima osservazione per counter
(.
). Questo perché non esiste un valore precedente per la prima osservazione di var1
, quindi la Stata fa qualcosa come var1[1] + var1[0] = 0 + . = .
.
La seconda osservazione per counter
è var1[2] + var1[1] = 0 + 0 = 0
.
La quinta osservazione per counter
è var1[5] + var1[4] = 1 + 0 = 1
.
La settima osservazione per counter
è var1[7] + var1[6] = 0 + 0 = 0
. E così via.