为什么Stata返回"未知函数+inrange()"?



我正在学习Stata编程的书Stata programming Introduction, Second Edition

在第4章中,generate是一个变量,用于测试其他变量是否满足逻辑条件,代码如下:

foreach v of varlist child1-child12{
local n_school "`n_school' + inrange(`v', 1, 5)"
}
gen n_school = `n_school'

当我修改这段代码以适应我自己的数据时,

foreach v of varlist qp605_s_1-qp605_s_5 {
local n_med  "`n_med' + inrange(`v', 1, 5)"
}
gen n_med = `n_med'

其中qp605_s_1的取值范围是1到17,则Stata返回:

. foreach v of varlist qp605_s_1-qp605_s_5 {
2.         local n_med "`n_med' + inrange(`v', 1, 5)"
3. }
. gen n_med = `n_med'
unknown function +inrange()
r(133);

你知道这段代码有什么问题吗?

我知道我错在哪里了

本地n_med+开头,因此我将其更改为:

local n_med 0
foreach v of varlist qp605_s_1-qp605_s_5{
local n_med "`n_med' + inrange(`v', 1, 5)"
}
gen n_med = `n_med',after(qp605_s_5)

,它工作!

BTW,根据Stata Programming Introduction to Stata Programming,这种方法比先generate一个全为零的变量,然后通过循环replace它要快,因为replace命令比generate慢,所以最好避免replace

这是另一种方法。

* Example generated by -dataex-. For more info, type help dataex
clear
input float(var1 var2)
1 5
2 6
3 7
4 8
end
gen wanted = .
mata :
data = st_data(., "var*")
st_store(., "wanted", rowsum(data :>= 1 :& data :<= 5))
end
list
+----------------------+
| var1   var2   wanted |
|----------------------|
1. |    1      5        2 |
2. |    2      6        1 |
3. |    3      7        1 |
4. |    4      8        1 |
+----------------------+

相关内容

最新更新