Domanda

In Stata, attualmente ho un set di dati che sembra:

Inserisci Descrizione dell'immagine qui

Sto cercando di creare un "contatore finale" nella colonna B in modo che sia simile a:

Inserire l'immagine Descrizione qui

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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top