Вы можете легко сделать это с помощью команды 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
Однако это будет не работать, если в строке более одного пропущенного значения.