我已经搞完了 一个公司的数据处理的程序,其中核心部分是:
1。处理一个公司的一天的数据,
2。然后用宏循环365次(当然,里面很多是没用的,我只是想做得通用些)。
问题出现了,因为一家公司的数据在30万条左右。我走一遍程序需要30分钟。 如果要用这个一个公司的程序,处理199家,意味着我要手工处理199次每次还得等30分钟 简单算 :200*30 约等于100个小时 没日没夜的算还得 一周,加人工干预大致得3个星期。
显然不现实。
我想在这个一个公司一年数据外再加个读数据的循环并形成一个199家公司的加总数据集。
我的问题:
1。是否还得用宏?
2。199家公司的数据集名是否要统一?这些数据集是分别的csv 文件,是否需要用数字代号什么的方式放在硬盘上,方便sas顺序找到他们,读入,并展开运算,形成总结数据集。
3。请给个大致程序。下面的程序节选自我的程序,是开始和结尾部分。我想在外面再进行一个199次的公司循环。
请大家给些思路。谢谢大家。
libname sample 'd:\sas\data\20090819 tanscation data aot2';
run;
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\2data aot.csv'
firstobs=2
missover
dsd;
input RIC $ DATE $ Time $ type $ PRICE BIDPRICE
Askprice
QUALIFIERS $@;
run;
这里是否可以加一个加总数据集的初始化?这个数据集不是下面一天数据集的简单累加,因为,我需要进行些最大似然类的金融计算,然后对结果累加。
/*建立空的一天数据加总数据集*/
data sample.trades;
set sample.onedaysellbuy;
delete;
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;
%sample;
/*因为简单用了365日历天,实际交易日只有250左右,删除有重复纪录的加总的数据集*/
proc
sort
data = sample.trades;
by date;
quit;
data sample.trades;
set
sample.trades;
by date;
if first.date=1;
run;