本文介绍了在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' 
}
  1. 您需要使用命令generate来生成新变量。

  2. 您需要用引号引用本地宏值。

  3. egen有自己的mean()函数,但它会产生一个变量,而这里需要一个常量。使用summarize, meanonly是最有效的方法。Stata中没有可以在任何地方应用的mean()函数。一旦使用summarize,就不需要使用本地宏来保存其结果。这里r(mean)可以直接使用。

  4. 您已经>=两次,但大概不是那个意思。使用inrange()并不是编写条件所必需的,但提供了更短的代码。

  5. 不能像以前那样使用if限定符来限定local宏的赋值。它们对Stata没有任何意义,因为这样的宏是常量。

  6. 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()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-02 19:41