【发布时间】:2014-05-04 17:49:26
【问题描述】:
我有这样的数据
year month X Y weight
2013 1 1 0 1000
2001 12 0 1 2000
我想基于X 和Y 变量创建一个变量Z,以year 为条件。我在 2002 年之前和之后有两个 year 公式。如果我使用 egen 和 if,
if year > 2002 {
bysort year month :egen Z= total( x*weight)
}
else {
bysort year month : egen Z= total(y*weight*0.5)
}
此代码不起作用,因为如果 year <2002 ,Stata 会报告 z 已经创建。有什么方法可以实现目标吗?
我使用了一种非常粗暴蛮力的方法来解决这个问题。我为 z 创建了两个变量,即 z 和 z_2002。然后如果年份小于 2002,我将 z 替换为 z_2002。
【问题讨论】:
-
“已创建”错误不是您唯一的问题。您错误地使用了编程 ifcmd 而不是 if 限定符(help if)。请参阅stata.com/support/faqs/programming/… 只有符合条件的 if 可用于对观察子集进行操作。
-
让我们重新开始。你到底想要什么?是否如下: 1. 有两条规则,一条用于 2002 年之前,一条用于 2002 年之后。 2. Z 是 x 或 y 与年份相关的每月函数的年总和。这是正确的吗?
-
z 是每个月和每个年的月总和。 z 的公式因年份而异。
-
@YanSong 看来您已经通过编辑原始问题回答了自己的问题。很高兴您回答了自己的问题。我不确定这是否仍然算作一个问题。
-
@fsmart 正如我在问题中所说,我的方法不够优雅。我希望有人会有更好的方法
标签: stata