Stata中的移动观测
如果缺少值,我想将观察值向左移动。例如,如果我有Stata中的移动观测,stata,Stata,如果缺少值,我想将观察值向左移动。例如,如果我有 num1 num2 num3 num4 num5 num6 1 2 . 2 4 . . . . 3 4 4 . . 3 4 1 . . 2 . 2 1 . 我想把它们转换过来: num1 num2 num3 num4 num5 num6 1 2 2 4 . . 3 4 4 .
num1 num2 num3 num4 num5 num6
1 2 . 2 4 .
. . . 3 4 4
. . 3 4 1 .
. 2 . 2 1 .
我想把它们转换过来:
num1 num2 num3 num4 num5 num6
1 2 2 4 . .
3 4 4 . . .
3 4 1 . . .
2 2 1 . . .
我不想重塑数据。我的数据太大。这适用于您的示例:
clear
input num1 num2 num3 num4 num5 num6
1 2 . 2 4 .
. . . 3 4 4
. . 3 4 1 .
. 2 . 2 1 .
end
egen all = concat(num*)
replace all = subinstr(all, ".", "", .)
compress all
count if all != ""
local j = 1
quietly while r(N) > 0 {
gen NUM`j' = real( substr(all, 1, 1) )
replace all = substr(all, 2, .)
local ++j
count if all != ""
}
drop all
list num* NUM*
+---------------------------------------------------------------------+
| num1 num2 num3 num4 num5 num6 NUM1 NUM2 NUM3 NUM4 |
|---------------------------------------------------------------------|
1. | 1 2 . 2 4 . 1 2 2 4 |
2. | . . . 3 4 4 3 4 4 |
3. | . . 3 4 1 . 3 4 1 |
4. | . 2 . 2 1 . 2 2 1 |
+---------------------------------------------------------------------+
编辑:在旧变量旁边创建新变量。然后由您决定是否删除旧的和重命名新的
除了您的示例之外,该线程还提出了各种问题,包括
数据布局(有人说是结构还是格式)是否适合您的目的。例如,如果您的数据集实际上是面板数据或纵向数据,那么在Stata中,长布局通常更可取。为此,您需要重塑long
在内存和速度方面,该方法与第一次基于长整形
的方法进行了比较(如果认为原始布局至关重要,则为最终的宽整形
)。一个比较可能以OP的数据集为特征(以及其他形式相似但大小不同的数据集,因为在这里发布的要点是其他人可能有类似的问题)
人们似乎经常抱怨重塑的速度,但抛开猜测和流言蜚语不谈,证据会很有趣
编辑2020年3月30日我建议这是一个更好的解决方案
clear
input num1 num2 num3 num4 num5 num6
1 2 . 2 4 .
. . . 3 4 4
. . 3 4 1 .
. 2 . 2 1 .
end
egen NUM = concat(num?), p(" ")
replace NUM = subinstr(NUM, ".", "", .)
split NUM, destring
list NUM?
+---------------------------+
| NUM1 NUM2 NUM3 NUM4 |
|---------------------------|
1. | 1 2 2 4 |
2. | 3 4 4 . |
3. | 3 4 1 . |
4. | 2 2 1 . |
+---------------------------+