SAS Transpose和Reshape Dataset

时间:2017-06-26 18:27:49

标签: 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; 

但是,我不知道如何命名列...

1 个答案:

答案 0 :(得分:2)

如果保留TIME变量,则需要按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语句,以便获得单个输出观察。