存储变量的值并重用它们

Store values from a variable and reuse them

这个问题可以帮助我解决我发布的另一个尚未解决的问题。基本上我需要在 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)在矩阵中保存第 1 组的 act1year 不同于 0(在本例中为 2001)的值,然后检查该值是否,对于 act2 为 1 的观测值,包含在 obs i=1,3 [year(i) : year(i)-2] 的范围内,在这种情况下,范围不包含存储在矩阵中的值;因此,该意见将被取消。对于组 id 2,代码应存储 [2001, 2002],然后检查范围 [year(6):year(6)-2] 是否包含存储在矩阵中的任何值。

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

这个问题和之前的讨论对我来说都很难理解,所以让我建议将以下内容作为解决方案的起点,该解决方案可以识别 (a) act1 发生或 (b) act2 不发生的观察结果在最近的 act1 发生后超过 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