面板数据中的返回计算不正确

时间:2018-11-14 12:59:16

标签: stata panel-data

我目前正在使用Stata中的面板数据,并运行以下命令来定义面板:

encode ticker, generate(ticker_n)
xtset ticker_n time

其中股票代码是一个字符串(在证券交易所上市公司的股票代码),时间是一个整数,从930(市场开放)到1559(市场关闭)。因此,此处的时间表示打开证券交易所的分钟数。在打开股票市场的每一分钟,我们都会在证券交易所列出所有报价的收盘价。数据示例如下:

date        time    open    high    low     close   volume  ticker  ticker_n
09/15/2008  930     33.31   33.31   33.31   33.31   2135    zeus    zeus
09/15/2008  931     32.94   32.94   32.94   32.94   100     zeus    zeus
09/15/2008  930     10.21   10.21   10.21   10.21   4270    bx      bx
09/15/2008  931     10.46   10.5    10.42   10.44   5700    bx      bx

然后,为计算收益(使用收盘价),我运行以下命令:

gen return = (close - l.close) / l.close

但是,这会导致一个奇怪的错误,即每隔一小时(时间= 1100、1200、1300等)根本不会计算退货,而Stata只会为退货报告“-”。

现在,我认为定义面板数据时出了点问题,例如,Stata无法识别出1500年之前的观测值应该是1459(我认为是1499?)。

因此,我的问题是,如何正确定义面板数据,以使Stata识别出我的时间轴以分钟为单位?我在Stata的官方文档中没有找到任何对我有帮助的东西。

1 个答案:

答案 0 :(得分:0)

的确是:您的time变量极大地困扰了您。如果time从1059升到1100,或者从1159升到1200,则每个跳到Stata的步数都是41。 1100之前的时间的值应该是1099,不会在您的数据中;因此之前的1100等值将全部丢失。毫无疑问,Stata会看着1100并说“哦!那是时间,因此上次时间应该是1059,我应该使用1059的值”。应用时间显示格式不会改变您无法理解时间的方式。

您无需说明应该如何使用每日数据进行分析。这是一些仅以小时和分钟为单位的时间技巧。

clear 
input time 
930
931 
959 
1000
1001 
1059
1100  
end 

gen double mytime = dhms(0, floor(time/100), mod(time, 100), 0) 

format mytime %tcHH:MM

gen id = 1 
xtset id mytime, delta(60000)  

list mytime L.mytime, sep(0)  

     +-----------------+
     |               L.|
     | mytime   mytime |
     |-----------------|
  1. |  09:30        . |
  2. |  09:31    09:30 |
  3. |  09:59        . |
  4. |  10:00    09:59 |
  5. |  10:01    10:00 |
  6. |  10:59        . |
  7. |  11:00    10:59 |
     +-----------------+