本文介绍了在ForValues循环中获取未知函数Mean()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
正在为此获取未知函数mean
。无法使用egen
,因为必须为每个值计算它。有点困惑。edu_mov_avg=.
forvalues current_year = 2/133 {
local current_mean = mean(higra) if longitbirthqtr >= current_year - 2 & longitbirthqtr >= current_year + 2
replace edu_mov_avg = current_mean if longitbirthqtr =
}
推荐答案
您的代码离工作还有很长的路要走。这里应该更近一些。
gen edu_mov_avg = .
qui forvalues current_qtr = 2/133 {
su higra if inrange(longitbirthqtr, `current_qtr' - 2, `current_qtr' + 2), meanonly
replace edu_mov_avg = r(mean) if longitbirthqtr == `current_qtr'
}
您需要使用命令
generate
来生成新变量。您需要用引号引用本地宏值。
egen
有自己的mean()
函数,但它会产生一个变量,而这里需要一个常量。使用summarize, meanonly
是最有效的方法。Stata中没有可以在任何地方应用的mean()
函数。一旦使用summarize
,就不需要使用本地宏来保存其结果。这里r(mean)
可以直接使用。您已经
>=
两次,但大概不是那个意思。使用inrange()
并不是编写条件所必需的,但提供了更短的代码。不能像以前那样使用
if
限定符来限定local
宏的赋值。它们对Stata没有任何意义,因为这样的宏是常量。longitbirthqtr
看起来像是季度日期。因此,我没有使用名称current_year
。
对于如此短的窗口,还有一种使用时间序列运算符的替代方法
tsset current_qtr
gen edu_mov_avg = (L2.higra + L1.higra + higra + F1.higra + F2.higra) / 5
这并不完全等同,因为将为前两个观察和后两个观察返回遗漏。
如果您的数据是面板数据,您的代码可能需要进一步的工作。但时间序列运算符方法仍然很简单,只要您声明面板标识符,例如
tsset panelid current_qtr
之后的generate
调用同上。
rolling
为此类计算提供了一个框架。 这篇关于在ForValues循环中获取未知函数Mean()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!