Stata:识别具有可以抵消的数字的连续行

时间:2015-08-05 21:52:47

标签: stata

我有一个长形式的数据集,按月列出观察结果。我想确定变量的连续行是否可以取消(换句话说,具有相同的绝对值)。如果是这样,我想将两个观察值都改为零。另外,我想要一个额外的虚拟变量来告诉我,我是否更改了该行的任何内容。我该如何构建代码?

例如,

Date       Var1      Var 2
Jan2010     5          6
Feb2010     6          0
Mar2010    -6          1

在上面的例子中,我想将数据集放在下面

Date       Var1      Var 2     Dummy
Jan2010     5          6        0
Feb2010     0          0        1
Mar2010     0          0        1

1 个答案:

答案 0 :(得分:0)

这(似乎)符合所描述的标准,但如果还有其他因素未明确提及(例如,您是否需要考虑Var2是否取消? out“?如果Apr20106),该怎么办。

clear
input str7 Date Var1 Var2
"Jan2010"     5          6
"Feb2010"     6          0
"Mar2010"    -6          1
end

gen Dummy = Var1 == Var1[_n+1] * -1 | Var1 == Var1[_n-1] * -1

replace Var1 = 0 if Dummy
replace Var2 = 0 if Dummy

li , noobs

产生

+-------------------------------+
|    Date   Var1   Var2   Dummy |
|-------------------------------|
| Jan2010      5      6       0 |
| Feb2010      0      0       1 |
| Mar2010      0      0       1 |
+-------------------------------+

或者更准确地说,Dummy应该根据实际月份而不是观察结果生成:

gen Month = monthly(Date, "MY")
format Month %tm
tsset Month , monthly

gen Dummy = Var1 == Var1[_n+1] * -1 | Var1 == Var1[_n-1] * -1

修改:正如Roberto正确指出的那样,之前的代码(使用abs())是根据发布的示例编写的,但乘以-1更加健壮且收益率更高相同的结果(对于发布的样本数据)。保留原始变量的建议当然是一个好主意。