将时间序列与变量具有相同名称的不同观察数量合并(SAS)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将时间序列与变量具有相同名称的不同观察数量合并(SAS)相关的知识,希望对你有一定的参考价值。
我有一堆时间序列数据(sas-files),我喜欢将它合并/组合成一个更大的表(我对SAS很新)。
- 文件名:cq_ts_SYMBOL,其中SYMBOL是每个文件的相应符号
- 具有以下结构:
堕落:费城1
SYMBOL DATE TIME BID ASK MID
AAA 20100101 9:30:00 10.375 10.4 .
AAA 20100101 9:31:00 10.38 10.4 .
.
.
AAA 20150101 15:59:00 15 15.1 .
whole_bb.assist:fillet2
SYMBOL DATE TIME BID ASK MID
BBB 20120101 9:30:00 12.375 12.4 .
BBB 20120102 9:31:00 12.38 12.4 .
.
.
BBB 20170101 15:59:00 20 20.1 .
主要特征: - 它们具有相同的变量名称 - 它们具有不同的观察数量 - 它们都保存在同一个文件夹中
所以我想要做的是: - 创建3个表:BID表,ASK表,具有以下结构的中间表,即对于bid-table,cq_ts_bid.sas7bdat:
DATE TIME AAA BBB ...
20100101 9:30:00 10.375 .
20100102 9:31:00 10.38 .
.
.
20120101 9:30:00 9.375 12.375
20120102 9:31:00 9.38 12.38
.
.
20150101 15:59:00 15 17
.
.
20170101 15:59:00 . 20
对于2个库存时间序列来说并不难做到这一点,但是,我想知道是否有可能做到以下几点:
- 从数据集cq_ts_AAA获取DATE TIME BID并将BID重命名为AAA(从符号中的值?这是否有意义?或从文件名中获取名称)。
- 对cq_ts_BBB执行相同操作。
- 实际上,循环遍历文件夹以获取文件和文件名的数量(这部分我或多或少,见下文)。
- 对于文件夹中的所有文件,合并cq_ts_BBB和cq_ts_BBB,其具有DATE TIME AAA(以前的出价AAA)BBB(BBB的前出价)。
- 这样做是为了BID,然后是ASK,最后是MID(实际上我无法从bid和ask中获得中点变量(即mid =(bid + ask)/ 2;)只是在前面的数据步骤中给出了“。”在创建文件时)。
我认为一个宏首先得到每个单个文件然后重命名(这个步骤应该何时发生?)它并将它们合并在一起 - 就像一个双循环。
这里重命名和合并部分:
data ALDW_short (rename=(iprice = ALDW));
set output.cq_ts_aldw
retain date time ALJ;
run;
data ALJ_short (rename= (iprice = ALJ));
set output.cq_ts_alj;
retain date time datetime ALJ;
run;
data ALDW_ALJ_merged (keep= date itime ALDW ALJ);
merge ALDW_short ALJ_short;
by datetime;
run;
这是遍历文件夹并获取名称列表的部分:
proc contents data = output._all_ out = outputcont(keep = memname) noprint;
run;
proc sort data = outputcont nodupkey;
by memname;
run;
data _null_;
set outputcont end = last;
by memname;
i+1;
call symputx('name'||trim(left(put(i,8.))),memname);
if last then call symputx('count',i);
run;
从文件名中提取符号(以及它们具有不同的长度)是否有意义,或者只是从变量SYMBOL中获取它们(我如何获得一个值来重命名我的列?)?
不知何故,我很难改变列的顺序,即。我尝试使用retain和format。
看起来你可以用PROC TRANSPOSE
轻松完成。将数据集合并到一个数据集中。
data all ;
set set output.cq_ts_: ;
by date time;
run;
然后对每个源变量/目标表使用PROC TRANSPOSE。
proc transpose data=all out=bid ;
by date time ;
id symbol;
var bid;
run;
给出你的示例数据MID的公式
mid = (bid + ask)/2 ;
应该管用。最有可能的是,如果您获得了所有缺失值,则可能会将赋值语句放在SET或INPUT语句之前。换句话说,您尝试使用尚未读取的值进行计算。
以上是关于将时间序列与变量具有相同名称的不同观察数量合并(SAS)的主要内容,如果未能解决你的问题,请参考以下文章
EXCEL表中,怎样将名字相同的信息合并,将其中的数值相加?
如何通过Python合并具有相同名称但在不同文件夹中的文件的内容?