使用条件递归定义Stata中的变量

Recursively define a variable in Stata with conditions

我想在特定条件下递归生成一个变量。我们称变量为 xx在不同条件下生成不同

  1. x_t=L1.x_t^a + b/2 如果 L1.x_t^a+b< cL1.x_t > d
  2. x_t=1+0.5x_t^a 如果L1.x_t^a+b>cL1.x_t > d
  3. x_t=L1.x_t^a 如果 L1.x_t < d

我知道如何在 R 中实现它,但不确定如何在 Stata 中实现它。我尝试了以下 2 段代码,但 none 有效。


gen x = 1
forvalues i = 2/_N {
    scalar temp = x[`i'-1]^a + b
    replace x = x[`i'-1]^a + b/2 if temp < c & x[`i'-1] > d
    replace x = 1 + x[`i']/2 if temp > c & x[`i'-1] > d
    replace x = x[`i'-1]^a if x[`i'-1] < d
}

gen x = 1
gen temp = L.x^a + b
replace x = L.x^a + b/2 if L.x > d & _n > 1 & temp < c
replace x = 1 + L.x^a/2 if temp > c & _n > 1 & L.x > d
replace x = L.x^a if L.x < d & _n > 1

第一段代码报错invalid syntax。第二段代码没有实现我的预期。我知道问题出在哪里,即 temp 应该在每次调用 x 后被替换,但我不知道如何实现这个。

这组条件看起来很奇怪!

有几个细节会阻止其他人复制您的所有代码示例。

  1. 任何其他人都需要set观察次数。
  2. 您需要将 a b c d 解释为 Stata 中的实体。它们是变量、作为变量保存的常量,还是作为标量保存的常量?
  3. 要使滞后运算符 L. 起作用,您首先需要 tssetxtset 数据集,这意味着至少有一个其他变量指示时间或顺序,但这是不解释。

第一段代码的一个具体问题是 forvalues 不会为您计算 _N。你需要去

forval i = 2/`=_N' 

该代码块的一个普遍问题是您可能希望每个 replace 语句都是

... in `i' 

“没有达到我的预期”不是我可以解决的问题。没有一个工作示例来说明计算应该产生什么以及它们做了​​什么,我一无所知。