У меня есть более 3400 файлов CSV, размер которых варьируется от 10 КБ до 3 МБ. Каждый CSV-файл имеет это общее имя файла: stockticker-Ret.csv
, где stockticker
является биржевым тикером, таким как AAPL, GOOG, YHOO и т. Д., И возвращает акции в каждую минуту в определенный день. Сначала мой код SAS начинается с загрузки всех имен титров акций из файла stockticker-Ret.csv
в наборе данных SAS. Я петлю над каждым тикером, чтобы загрузить соответствующий файл .csv
в наборе данных SAS под названием want
и нанести некоторые данные на want
и сохранить окончательный набор данных want
каждого тикера в наборе данных SAS под названием global
. Как вы можете себе представить, этот процесс занимает много времени. Есть ли способ улучшить мой код DO LOOP
ниже, чтобы ускорить этот процесс?SAS: Улучшение скорости цикла do с помощью импорта proc
/*Record in a sas dataset all the csv file name to extract the stock ticker*/
data yfiles;
keep filename;
length fref $8 filename $80;
rc = filename(fref, 'F:\data\');
if rc = 0 then do; did = dopen(fref);
rc = filename(fref); end; else do; length msg $200.; msg = sysmsg(); put msg=; did = .; end;
if did <= 0 then putlog 'ERR' 'OR: Unable to open directory.';
dnum = dnum(did);
do i = 1 to dnum; filename = dread(did, i); /* If this entry is a file, then output. */ fid = mopen(did, filename); if fid > 0 then output; end;
rc = dclose(did);
run;
/*store in yfiles all the stock tickers*/
data yfiles(drop=filename1 rename=(filename1=stock));
set yfiles;
filename1=tranwrd(filename,'-Ret.csv','');
run;
proc sql noprint;
select stock into :name separated by '*' from work.yfiles;
%let count2 = &sqlobs;
quit;
*Create the template of the desired GLOBAL SAS dataset;
proc sql;
create table global
(stock char(8), time_gap num(5), avg_ret num(5));
quit;
proc sql;
insert into global
(stock, time_gap,avg_ret)
values('',0,0);
quit;
%macro y1;
%do i = 1 %to &count2;
%let j = %scan(&name,&i,*);
proc import out = want datafile="F:\data\&j-Ret.csv"
dbms=csv replace;
getnames = yes;
run;
data want;
set want; ....
....[Here I do 5 Datasteps on the WANT sasfile]
/*Store the want file in a global SAS dataset that will contain all the stock tickers from the want file*/
data global;
set global want; run;
%end;
%mend y1;
%y1()
Как вы можете видеть глобальный набор данных SAS расширяет для каждого want
набора данных, которые я храню в global
.
У файлов есть общий макет? – Joe
да, они имеют раскладку для комикса – Plug4