我有以下变量dre
,mar
,gro
和mxi
:
. 0.5 . .
0.8 . . .
. . 0.39 .
. . . 0.2
如何在第一行中显示所有非缺失值?
例如,像这样:
0.8 0.5 0.39 0.2
我可以手动替换Stata中的观测值,但是必须有更好的方法吗?
答案 0 :(得分:2)
您可以使用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
但是,如果每行有多个以上的非缺失值,这将 不起作用。