1、建议用宏;
2、大致程序思路:
libname sample 'd:\sas\data\20090819 tanscation data aot2';
run;
/*分离出每日交易 宏*/
/*把宏单独放处理,不要嵌套宏,免得多次编译*/
%macro sample;
%do k=1 % to 365;
Data sample.F;
set sample.E;
where num = &k;
run;
.../进入处理一天的数据处理, 这里省略*/
/*这里开始对每一日的数据作年加总*/
proc append
base = sample.trades data = sample.Onedaysellbuy;
run;
%end;
%mend;
/*统一CSV文件名,从1到199,可以手动修改也可以下个批次修改文件名的小工具*/
%macro Trade;
%local filename;
%do filename=1 %to 199;
data sample.sample;
informat
RIC $9.
date
date10.
/* $10. ddmmyy10.*/
Time $10./* time10.1 */
type $5.
price 4.
Bidprice 4.
askprice 4.
QUALIFIERS $29.
;
infile
"d:\sas\data\&filename..csv"
firstobs=2
missover
dsd;
input RIC $ DATE $ Time $ type $ PRICE BIDPRICE
Askprice
QUALIFIERS $@;
run;
/*建立空的一天数据加总数据集*/
data sample.trades;
set sample.onedaysellbuy;
delete;
run;
...../* 对数据进行前期处理,这里省略*/
%sample;
proc sort /*排序后使用FIRST.VAR比较耗时,建议用SQL改写*/
data = sample.trades;
by date;
quit;
data sample.trades;
set sample.trades;
by date;
if first.date=1;
run;
%end;
%mend Trade;
%trade;
文件处理时间比较长,有两个建议:
第一,优化现在的语句;
第二,使用SAS9多线程技术。
以两个线程处理为例,大概思路:
把199个文件分两部分同时处理,
把SAS程序保存为两个SAS文件trade1.sas和trade2.sas,
修改%Trade 里面的 %do filename=1 %to 199;
分别修改为%do filename=1 %to 100;和%do filename=101 %to 199;
使用命令startsas sysin="SAS文件名""系统选项" 开启两个线程,同时执行trade1.sas和trade2.sas
仅提供思路参考,没有测试。
另外因为STARTSAS 是试用功能,可能会导致意外的结果。请谨慎使用~