Иногда я использую несколько раздутый подход к созданию переменных в Stata, когда работаю с временными рядами или панельными данными в длинной форме: я создаю много новых переменных в широкой форме данных, фактически поддерживая длинную форму данных. Имея такой раздутый набор данных, есть два разных способа создать общую переменную, которая суммирует эти переменные, используя либо egen = rowtotal(varlist)
, либо by varlist: egen = total(exp)
. Однако использование compare
показывает, что эти два способа дают минимально разные результаты. Как возникают эти различия?
Вот рабочий пример:
webuse grunfeld, clear
drop if year < 1950
*** Totals using new variables in wide data shape for each year ***
gen invest50 = invest if year==1950
gen invest51 = invest if year==1951
gen invest52 = invest if year==1952
gen invest53 = invest if year==1953
gen invest54 = invest if year==1954
bysort company: replace invest50 = invest50[_n-1] ///
if company[_n]==company[_n-1] & year[_n]>1950
bysort company: replace invest51 = invest51[_n-1] ///
if company[_n]==company[_n-1] & year[_n]>1951
bysort company: replace invest52 = invest52[_n-1] ///
if company[_n]==company[_n-1] & year[_n]>1952
bysort company: replace invest53 = invest53[_n-1] ///
if company[_n]==company[_n-1] & year[_n]>1953
gsort company -year
bysort company: replace invest51 = invest51[_n-1] ///
if company[_n]==company[_n-1] & year[_n]<1951
bysort company: replace invest52 = invest52[_n-1] ///
if company[_n]==company[_n-1] & year[_n]<1952
bysort company: replace invest53 = invest53[_n-1] ///
if company[_n]==company[_n-1] & year[_n]<1953
bysort company: replace invest54 = invest54[_n-1] ///
if company[_n]==company[_n-1] & year[_n]<1954
sort company year
egen totin1 = rowtotal(invest50 invest51 invest52 ///
invest53 invest54)
*** Totals using variables in long data shape and by-option ***
bysort company (year): egen totin2 = total(invest)
desc tot*
compare totin1 totin2