按年和公司ID回归以保存系数

时间:2017-04-29 10:16:08

标签: regression stata finance

我正在尝试按公司ID和年份运行回归,并将每个公司年模型的系数保存为新列中的新变量,而不是其他列。还有一个额外的皱纹<我有1990 - 2010年的面板数据,并希望仅使用t到t-4运行每个回归(即,2001年,仅使用1998 - 2001年的数据,即1990年那时只有数据1990年等等)。我是使用foreach循环的新手,我在网上找到了一些先前的编码。我试图让它适应我的情况,但有两个问题:任何事情......

  1. 输出保持空白

  2. 我还没想出如何使用滚动的四年数据期。

  3. 这是我试过的代码。任何建议都会非常感激。

    @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 
    

1 个答案:

答案 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