我在网上搜索了这个问题,他们没有完全给我我想要的答案。
但是我不想重塑数据。我的数据太大。如果缺少观测值,我想将观测值向左移动。例如,
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 . . .
答案 0 :(得分:2)
这适用于您的示例:
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 |
+---------------------------------------------------------------------+
编辑:与旧变量一起创建新变量。然后由您决定是否drop
旧的和rename
新的。
除了您的示例之外,该线程还会引发各种问题,包括
您的数据布局(结构或格式,有人说)是否适合您的目的。例如,如果您的数据集实际上是面板数据或纵向数据,则在Stata中通常首选长布局。为此,您需要reshape long
。
此方法在内存和速度方面的比较,并且在第一实例中基于reshape long
(如果认为原始布局是必需的,则为最终reshape wide
)进行比较。 OP的数据集可能会进行比较(以及其他形式相似但大小不同的数据集,因为此处发布的重点是其他人可能有类似的问题)。
人们似乎经常抱怨reshape
的速度,但是除了猜测和八卦,证据还是很有趣的。