Stata:用可以抵消的数字识别连续的行
Stata: identify consecutive rows with numbers that can cancel out
我有一个按月列出观察结果的长格式数据集。我想确定变量的连续行是否可以抵消(换句话说,具有相同的绝对值)。如果是这样,我想将两个观察值都更改为零。此外,我想要一个额外的虚拟变量来告诉我是否对该行进行了任何更改。如何构建代码?
例如,
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
这(表面上)符合描述的标准,但如果有其他未明确提及的因素(例如,您是否需要考虑是否Var2
"cancels out"?如果Apr2010
是6
呢?等等).
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
Edit:正如 Roberto 正确指出的那样,之前的代码(使用 abs()
)是根据发布的示例编写的,但乘以 -1
更稳健并产生相同的结果(对于发布的样本数据)。保留原始变量的建议当然是一个好主意。
我有一个按月列出观察结果的长格式数据集。我想确定变量的连续行是否可以抵消(换句话说,具有相同的绝对值)。如果是这样,我想将两个观察值都更改为零。此外,我想要一个额外的虚拟变量来告诉我是否对该行进行了任何更改。如何构建代码?
例如,
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
这(表面上)符合描述的标准,但如果有其他未明确提及的因素(例如,您是否需要考虑是否Var2
"cancels out"?如果Apr2010
是6
呢?等等).
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
Edit:正如 Roberto 正确指出的那样,之前的代码(使用 abs()
)是根据发布的示例编写的,但乘以 -1
更稳健并产生相同的结果(对于发布的样本数据)。保留原始变量的建议当然是一个好主意。