使用条件递归定义Stata中的变量
Recursively define a variable in Stata with conditions
我想在特定条件下递归生成一个变量。我们称变量为 x。 x在不同条件下生成不同
- x_t=L1.x_t^a + b/2 如果 L1.x_t^a+b< c 和 L1.x_t > d
- x_t=1+0.5x_t^a 如果L1.x_t^a+b>c 和 L1.x_t > d
- 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
后被替换,但我不知道如何实现这个。
这组条件看起来很奇怪!
有几个细节会阻止其他人复制您的所有代码示例。
- 任何其他人都需要
set
观察次数。
- 您需要将
a b c d
解释为 Stata 中的实体。它们是变量、作为变量保存的常量,还是作为标量保存的常量?
- 要使滞后运算符
L.
起作用,您首先需要 tsset
或 xtset
数据集,这意味着至少有一个其他变量指示时间或顺序,但这是不解释。
第一段代码的一个具体问题是 forvalues
不会为您计算 _N
。你需要去
forval i = 2/`=_N'
该代码块的一个普遍问题是您可能希望每个 replace
语句都是
... in `i'
“没有达到我的预期”不是我可以解决的问题。没有一个工作示例来说明计算应该产生什么以及它们做了什么,我一无所知。
我想在特定条件下递归生成一个变量。我们称变量为 x。 x在不同条件下生成不同
- x_t=L1.x_t^a + b/2 如果 L1.x_t^a+b< c 和 L1.x_t > d
- x_t=1+0.5x_t^a 如果L1.x_t^a+b>c 和 L1.x_t > d
- 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
后被替换,但我不知道如何实现这个。
这组条件看起来很奇怪!
有几个细节会阻止其他人复制您的所有代码示例。
- 任何其他人都需要
set
观察次数。 - 您需要将
a b c d
解释为 Stata 中的实体。它们是变量、作为变量保存的常量,还是作为标量保存的常量? - 要使滞后运算符
L.
起作用,您首先需要tsset
或xtset
数据集,这意味着至少有一个其他变量指示时间或顺序,但这是不解释。
第一段代码的一个具体问题是 forvalues
不会为您计算 _N
。你需要去
forval i = 2/`=_N'
该代码块的一个普遍问题是您可能希望每个 replace
语句都是
... in `i'
“没有达到我的预期”不是我可以解决的问题。没有一个工作示例来说明计算应该产生什么以及它们做了什么,我一无所知。