在第一行中上移观察值

时间:2018-09-20 07:47:36

标签: stata

我有以下变量dremargromxi

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

如何在第一行中显示所有非缺失值?

例如,像这样:

0.8 0.5 0.39 0.2

我可以手动替换Stata中的观测值,但是必须有更好的方法吗?

1 个答案:

答案 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

但是,如果每行有多个以上的非缺失值,这将 不起作用。