我正在开展一项研究项目,要求我对1993年至2014年间每一天的市场回报率(数千家公司)进行线性回归。
数据类似于(这是虚拟数据):
| Ticker | Time | Stock Return | Market Return |
|----------|----------|--------------|---------------|
| Facebook | 12:00:01 | 1% | 1.5% |
| Facebook | 12:00:02 | 1.5% | 2% |
| ... | | | |
| Apple | 12:00:01 | -0.5% | 1.5% |
| Apple | 12:00:03 | -0.3% | 2% |
数据量非常大。每天大约有1.5 G的数据。这些数据有21年我需要分析并运行回归。
回归公式类似于
Stock_Return = beta * Market_Return + alpha
其中beta和alpha是我们估计的两个系数。每个公司和每天的系数都不同。
现在,我的问题是,如何输出beta&每个公司的alpha和每天的数据结构?
我正在阅读SAS regression documentation,但似乎输出是文本而不是数据结构。
文档中的代码:
proc reg;
model y=x;
run;
文档的输出:
我无法在每一天阅读每家公司的每个测试版。有成千上万的人。
因此,我想知道是否有办法将beta输出并提取到数据结构中?
我有OOP语言的背景(python和java)。因此SAS有时会让人感到困惑......
答案 0 :(得分:1)
SAS在许多方面与面向对象编程语言非常相似,当然也具有函数式语言和4GL的特性。
在这种情况下,有一个对象:输出传递系统对象(ODS
)。 SAS 9中产生打印输出的每个过程都通过输出传送系统产生,如果您知道对象的名称,通常可以通过ODS OUTPUT
获得该输出。
您可以使用ODS TRACE
查看特定过程产生的输出的名称。
data stocks;
set sashelp.stocks;
run;
ods trace on;
proc reg data=stocks;
by stock;
model close=open;
run;
ods trace off;
记下日志中的名称。然后无论你想要什么输出,你只需用ODS OUTPUT
语句包装proc。
因此,如果我想要参数估计,我可以抓住它们:
ods output ParameterEstimates=stockParams;
proc reg data=stocks;
by stock;
model close=open;
run;
ods output close;
如果您想要输出多个数据集,可以根据需要使用尽可能多的ODS OUTPUT语句。