SAS转置和重塑数据集
我拥有以下结构的原始数据集:SAS转置和重塑数据集,sas,Sas,我拥有以下结构的原始数据集: | Ticker | Time | Stock Return | |----------|----------|--------------| | Facebook | 12:00:01 | 1% | | Facebook | 12:00:02 | 1.5% | | ... | | | | Apple | 12:00:01 | -0.5% | |
| 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% |
现在,我想构建一个具有以下结构的新数据集:
| 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% |
也就是说,除了股票回报率,我放弃了所有的变量。新数据集中的stock return变量将重命名为stock ticker名称
时间应该是连续的(一秒接一秒),并且它们应该在每一行中匹配
在原始数据集中,不同行中可能有重复的股票代码
我想知道如何才能做到这一点?我这样做是为了进行主成分分析
我正在考虑以下方法:
DATA PCASET;
SET ORIGINAL DATASET;
RUN;
但是,我不知道如何命名列…如果保留时间变量,则需要按时间和股票代码排序,然后进行转置
proc sort data=have;
by time ticker ;
run;
proc transpose data=have out=want ;
by time ;
id ticker ;
var stock_return ;
run;
然后,每个时间值将获得一个观察值
否则,您需要将每个TICKER的数据减少到一条记录,然后使用相同的转置,而不使用BY语句,以便获得单个输出观察。如果保留时间变量,则需要按时间和TICKER排序,然后转置
proc sort data=have;
by time ticker ;
run;
proc transpose data=have out=want ;
by time ;
id ticker ;
var stock_return ;
run;
然后,每个时间值将获得一个观察值
否则,您需要将每个股票代码的数据减少到一条记录,然后在不使用BY语句的情况下使用相同的转置,以便获得一个输出观察。。您打算如何处理这些多个记录?我计划对其运行proc factor。这是这样的:我看不出这与你的问题有什么关系。我需要为主成分分析准备数据。仍然与你的问题无关——一次一个问题。您当前的问题是如何重新格式化数据。还是别的什么?我假设您已经与proc factor/pca检查过这是您需要的格式类型,因为我不会为您这样做。在编译数据以使其有意义之后,proc TRANSPOSE。您打算如何处理这些多个记录?我计划对其运行proc factor。这是这样的:我看不出这与你的问题有什么关系。我需要为主成分分析准备数据。仍然与你的问题无关——一次一个问题。您当前的问题是如何重新格式化数据。还是别的什么?我假设你已经和proc factor/pca核实过这是你需要的格式类型,因为我不会为你这样做。转置后我得到了非常奇怪的结果。有些列缺少数据,有些列(最后一列)没有标记。为什么?@JinhuaWang你的日志没有错误吗?通常这意味着您没有正确处理输入数据集。正如Tom所说的,您需要将数据减少到每秒一条记录。如果任何数据在转置前丢失,转置后将丢失。在转置步骤之前,日志是无错误的。我在想,这是不是因为不是每个股票都包含在每个时段?有些股票并不总是交易。。。但是这应该会导致空列名和非空列内容。@JinhuaWang“这应该导致空列名”的说法没有意义。想想转置应该如何工作——您正在翻转数据,并期望每个时间/股票代码都有一个记录。如果没有股票代码,那么就没有列标题,但是如果你有一条股票代码的记录,你就会得到一列。我想你需要阅读手册和一些文档。或者玩一玩,看看你用一个小测试数据集得到了什么,这样你就能理解它了。我个人推荐后者。@Reeza我试过加州大学洛杉矶分校的例子,它们似乎奏效了。我还对它进行了处理,删除了一些ID,我确实发现列名仍然存在,但只有一些空列内容。现在我更不确定我的股票数据集上发生了什么。。。似乎没有理由使用空列名称,但我有最后100多个没有名称的列……在转置之后,我得到了非常奇怪的结果。有些列缺少数据,有些列(最后一列)没有标记。为什么?@JinhuaWang你的日志没有错误吗?通常这意味着您没有正确处理输入数据集。正如Tom所说的,您需要将数据减少到每秒一条记录。如果任何数据在转置前丢失,转置后将丢失。在转置步骤之前,日志是无错误的。我在想,这是不是因为不是每个股票都包含在每个时段?有些股票并不总是交易。。。但是这应该会导致空列名和非空列内容。@JinhuaWang“这应该导致空列名”的说法没有意义。想想转置应该如何工作——您正在翻转数据,并期望每个时间/股票代码都有一个记录。如果没有股票代码,那么就没有列标题,但是如果你有一条股票代码的记录,你就会得到一列。我想你需要阅读手册和一些文档。或者玩一玩,看看你用一个小测试数据集得到了什么,这样你就能理解它了。我个人推荐后者。@Reeza我试过加州大学洛杉矶分校的例子,它们似乎奏效了。我还对它进行了处理,删除了一些ID,我确实发现列名仍然存在,但只有一些空列内容。现在我更不确定我的股票数据集上发生了什么。。。似乎没有理由使用空列名称,但我有最后100多个没有名称的列。。。。