Переместить наблюдения в первый ряд - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть следующие переменные dre, mar, gro и mxi:

. 0.5 . .
0.8 . . .
. . 0.39 .
. . . 0.2

Как я могу вывести все не пропущенные значения в первой строке?

Например, вот так:

0.8 0.5 0.39 0.2

Я могу вручную заменить наблюдения в Stata, но должен быть лучший способ сделать это?

1 Ответ

0 голосов
/ 20 сентября 2018

Вы можете легко сделать это с помощью команды reshape:

clear

input dre mar gro mxi
. 0.5 . .
0.8 . . .
. . 0.39 .
. . . 0.2
end

list 
     +-----------------------+
     | dre   mar   gro   mxi |
     |-----------------------|
  1. |   .    .5     .     . |
  2. |  .8     .     .     . |
  3. |   .     .   .39     . |
  4. |   .     .     .    .2 |
     +-----------------------+ 

ds
rename (`r(varlist)') (var#), addnumber(1) r
local oldnames "`r(oldnames)'"
local newnames "`r(newnames)'"

generate id = _n
reshape long var, i(id)

sort _j
drop if missing(var)

bysort _j: replace id = _n
reshape wide var, i(id) j(_j)

drop id
rename (`newnames') (`oldnames')

Приведенный выше фрагмент кода с желаемым выводом:

     +-----------------------+
     | dre   mar   gro   mxi |
     |-----------------------|
  1. |  .8    .5   .39    .2 |
     +-----------------------+

Вы также можете сделать следующее (согласно комментарию @ NickCox):

collapse (mean) dre mar gro mxi

Однако это будет не работать, если в строке более одного пропущенного значения.

...