我正在尝试按公司ID和年份运行回归,并将每个公司年模型的系数保存为新列中的新变量,而不是其他列。还有一个额外的皱纹<我有1990 - 2010年的面板数据,并希望仅使用t到t-4运行每个回归(即,2001年,仅使用1998 - 2001年的数据,即1990年那时只有数据1990年等等)。我是使用foreach循环的新手,我在网上找到了一些先前的编码。我试图让它适应我的情况,但有两个问题:任何事情......
输出保持空白
我还没想出如何使用滚动的四年数据期。
这是我试过的代码。任何建议都会非常感激。
@DatabaseSetup
以下是数据外观的简短快照;
use paneldata.dta // the dataset I am working in
generate coeff . //empty variable for coefficient
foreach x of local levels {
forval z = 1990/2010
{
capture reg excess_returns excess_market
replace coeff = _b[fyear] & _b[CompanyID] if e(sample) }
}
CompanyID Re_Rf Rm-Rf Year
10 2 2 1990
10 3 2 1991
15 3 2 1991
15 4 2 1992
15 5 2 1993
21 4 2 1990
21 4 2 1991
34 3 1 1990
34 3 1 1991
34 4 1 1992
34 2 1 1993
34 3 1 1994
34 4 1 1995
34 2 1 1996
我想运行以下回归:
Re_Rf = excess_returns
Rm_Rf = excess_market
答案 0 :(得分:1)
对Statalist进行了很好的讨论,但我认为这个答案可能有助于您了解循环以及Stata语法的工作原理。
我将使用的代码如下:
<project>
...
<build>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<packagingExcludes>WEB-INF/lib/your_jar_name.jar</packagingExcludes>
</configuration>
</plugin>
</plugins>
</build>
...
</project>
如果您没有平衡的面板,这是一个潜在的危险事情。如果您对此感到担心,可能有办法使用generate coeff = . //empty variable for coefficient
// put the values of gvkey into a local macro called levels
qui levelsof CompanyID, local(levels)
foreach co of local levels {
forval yr = 1994/2010 {
// run the regression with the condition that year is between yr
// and yr-3 (which is what you write in your example)
// and the CompanyID is the same as in the regression
qui reg Re_Rf Rm_Rf if fyear <= `yr' & fyear >= `yr'-3 & CompanyID== `co'
// now replace coeff equal to the coefficient on Rm_Rf with the same
// condiditions as above, but only for year yr
replace coeff = _b[Rm_Rf] if fyear == `yr' & CompanyID == `co'
}
}
或更改fyear循环来处理它,包括:
capture