我目前正在使用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的官方文档中没有找到任何对我有帮助的东西。
答案 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 |
+-----------------+