Cum să creați eficient variabila lag folosind Stata (Programare, Stata)

fly36 a intrebat.

Am date de panel (timp: data, nume: ticker). Doresc să creez 10 decalaje pentru variabilele x și y. Acum creez fiecare variabilă lag una câte una folosind următorul cod:

by ticker: gen lag1 = x[_n-1]

Cu toate acestea, acest lucru arată dezordonat.

Îmi poate spune cineva cum pot crea variabilele lag mai eficient, vă rog?

Să folosesc o buclă sau Stata are o modalitate mai eficientă de a rezolva acest tip de problemă?

2 răspunsuri
Roberto Ferrer

@Robert ți-a arătat modul simplificat de a face acest lucru. Pentru completare, iată modul „tradițional”, plictisitor:

clear
set more off

*----- example data -----

set obs 2

gen id = _n
expand 20

bysort id: gen time = _n
tsset id time

set seed 12345
gen x = runiform()
gen y = 10 * runiform()

list, sepby(id)

*----- what you want -----

// "traditional" loop
forvalues i = 1/10 {
     gen x_`i' = L`i'.x
     gen y_`i' = L`i'.y
}

list, sepby(id)

Și o combinație:

// a combination
foreach v in x y {
    tsrevar L(1/10).`v'
    rename (`r(varlist)') `v'_#, addnumber
}

Dacă scopul este de a crea variabile decalate pentru a le utiliza în anumite estimări, să știți că puteți utiliza operatorii de serii de timp în cadrul multor comenzi de estimare, direct; adică nu este nevoie să creați variabilele decalate în primul rând. A se vedea help tsvarlist.

Robert Picard

Puteți face o buclă pentru a face acest lucru, dar puteți, de asemenea, să profitați de tsrevar pentru a genera variabile decalate temporare. Dacă aveți nevoie de variabile permanente, puteți utiliza rename group pentru a le redenumi.

clear
set obs 2
gen id = _n
expand 20
bysort id: gen time = _n
tsset id time
set seed 12345
gen x = runiform()
gen y = 10 * runiform()
tsrevar L(1/10).x
rename (`r(varlist)') x_#, addnumber
tsrevar L(1/10).y
rename (`r(varlist)') y_#, addnumber

Rețineți că, dacă faceți acest lucru pentru a calcula o statistică pe o fereastră mobilă, consultați tsegen (de la SSC)

Tags: