2017-06-26 72 views
0

我有以下结构的原始数据集:SAS移调,重塑数据集

| Ticker | Time  | Stock Return | 
|----------|----------|--------------| 
| Facebook | 12:00:01 | 1%   | 
| Facebook | 12:00:02 | 1.5%   | 
| ...  |   |    | 
| Apple | 12:00:01 | -0.5%  | 
| Apple | 12:00:02 | -0.3%  | 
| ...  |   |    | 
| Alibaba | 12:00:01 | -0.5%  | 
| Alibaba | 12:00:02 | -0.3%  | 
| ...  |   |    | 

现在,我要构建具有以下结构的新的数据集:

| Facebook | Apple | ...... | Alibaba | 
|----------|-------|----------|---------| 
| 1%  | 1.3% |   | 1.8% | 
| 1.5%  | 1.2% |   | 1.5% | 
| ...  | ... |   | ...  | 
| 0.1%  | 1.7% |   | 1.3% | 
| 0.3%  | 2.3% |   | 0.2% | 

也就是说,我放弃了所有的变量,但股票回报。新数据集中的股票回报变量被重命名为股票行情名称。

时间应该是连续的(秒),他们应该在每一行匹配。

在原始数据集中,不同行中可能存在重复的股票报价。

我想知道我该如何做到这一点?我正在做这个主成分分析。

我想通过以下方式:

DATA PCASET; 
    SET ORIGINAL DATASET; 

RUN; 

不过,我不知道如何命名列...

+0

PROC TRANSPOSE编译完数据后才有意义。你打算如何处理这些多条记录? – Reeza

+0

我打算在其上运行一个proc因子。这是这样的:https://support.sas.com/documentation/cdl/en/statug/63347/HTML/default/viewer.htm#statug_factor_sect028.htm –

+0

我不明白这与您的问题有什么关系。 – Reeza

回答

2

如果你把时间变量,那么你需要排序TIME和TICKER,然后转置。

proc sort data=have; 
    by time ticker ; 
run; 
proc transpose data=have out=want ; 
    by time ; 
    id ticker ; 
    var stock_return ; 
run; 

然后,您将获得每个时间值的一个观测值。

否则,您需要将数据减少到每个TICKER一条记录,然后使用不带BY语句的同一个转置,以便获得单个输出观察结果。

+0

转置后我收到了很奇怪的结果。有些列缺少数据,有些列(最后一列)没有代码。这是为什么? –

+0

@JinhuaWang是你的日志错误免费的吗?通常这意味着你没有正确处理你的输入数据集。正如汤姆所说,你需要将数据减少到每秒一个记录的一个记录。如果任何数据在转置之后缺少一个代码。 – Reeza

+0

日志在转置步骤之前是无错误的。我在想,是不是因为每个时段都没有包含每股股票?有些股票并不总是交易...但是这应该会导致空列名称和非空列字段。 –