存储变量中的值并重用它们

时间:2015-07-16 08:49:19

标签: matrix stata

这个问题可以帮助我解决我发布的另一个尚未解决的问题。基本上我需要调整Stata中的数据集,我想一个程序需要首先在一个矩阵中存储变量的某些值,然后使用另一个变量的值与存储在矩阵中的值进行比较。一个简单的例子如下:

obs id act1 act2  year act1year
  1   1   0    1   2000    0
  2   1   1    0   2001   2001
  3   1   0    1   2004    0  
  4   2   1    0   2001   2001
  5   2   1    0   2002   2002
  6   2   0    1   2004    0

代码应该能够通过(id)将act1year的值与{1}}(在这种情况下为2001)不同于组1保存在矩阵中,然后检查该值是否为观察值其中0为1,包含在act2 i = 1,3 [年(i):年(i)-2]的范围内,在这种情况下,范围不包含存储的值在矩阵中;因此观察将被取消。对于组obs 2,代码应存储[2001,2002],然后检查范围[year(6):year(6)-2]是否包含存储在矩阵中的任何值。

我希望我的问题足够清楚!抱歉没有发布任何尝试,但这是我真的不知道该怎么做。

1 个答案:

答案 0 :(得分:1)

这个问题和前面的讨论对我来说都很难理解,所以让我建议以下作为一个解决方案的起点,该解决方案可以确定(a)act1发生或(b)act2发生的观察结果不超过最近的一次事件发生后2年。

clear
input id act1 act2  year
  1   0    1   2000
  1   1    0   2001
  1   0    1   2004
  2   1    0   2001
  2   1    0   2002
  2   0    1   2004
end
generate a1yr = 0
replace  a1yr = year if act1==1
generate act1r = -act1
bysort id (year act1r): replace a1yr=a1yr[_n-1] if a1yr==0 & _n>1
generate tokeep = 0
replace  tokeep = 1 if act1==1
replace  tokeep = 1 if act2==1 & year-a1yr<=2
list, clean noobs

查看之前的讨论,现在的建议,建议将以下数据替换为上面的代码,然后查看代码是否满足讨论的需要。

input obsno id act1 act2  year
  1  1  1 0 2000
  2  1  0 1 2001
  3  1  0 1 2002
  4  1  0 1 2002
  5  1  0 1 2003
  6  2  1 0 2000
  7  2  1 0 2001
  8  2  0 1 2002
  9  2  0 1 2002
 10  2  0 1 2003
end