斯塔塔中的变化观测

时间:2018-11-03 16:31:19

标签: 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    .    .    .
3    4    1    .    .    .
2    2    1    .    .    .

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新的。

除了您的示例之外,该线程还会引发各种问题,包括

  1. 您的数据布局(结构或格式,有人说)是否适合您的目的。例如,如果您的数据集实际上是面板数据或纵向数据,则在Stata中通常首选长布局。为此,您需要reshape long

  2. 此方法在内存和速度方面的比较,并且在第一实例中基于reshape long(如果认为原始布局是必需的,则为最终reshape wide)进行比较。 OP的数据集可能会进行比较(以及其他形式相似但大小不同的数据集,因为此处发布的重点是其他人可能有类似的问题)。

人们似乎经常抱怨reshape的速度,但是除了猜测和八卦,证据还是很有趣的。