我正在将数据集附加到另一个数据集,然后对基础数据集进行排序。
proc append base=&RAWDATA data=GAPDATA;
run;
proc sort data=&RAWDATA; by Symbol Date Time; run;
但SAS继续返回错误消息:错误:除非使用FORCE选项,否则无法对索引数据集进行排序。
我使用的完整代码:
%MACRO GAP_SEC(RAWDATA);
data GAPDATA;
SET &RAWDATA;
retain SYMBOL DATE TIME BB BO MIDPRICE;
LAG_SYMBOL = lag(SYMBOL);
LAG_DATE = lag(DATE);
LAG_TIME = lag(TIME);
LAG_BB = lag(BB);
LAG_BO = lag(BO);
LAG_MIDPRICE = lag(MIDPRICE);
TIME_DIFF = intck('second', LAG_TIME, TIME);
if TIME_DIFF > 1 and SYMBOL = LAG_SYMBOL and DATE = LAG_DATE then
DO;
n=TIME_DIFF;
TIME = LAG_TIME;
DO WHILE(N>1);
SYMBOL = LAG_SYMBOL;
TIME = intnx('second',TIME,1);
DATE = LAG_DATE;
BB = LAG_BB;
BO = LAG_BO;
MIDPRICE = LAG_MIDPRICE;
output;
N=N-1;
END;
END;
drop LAG_SYMBOL LAG_DATE LAG_TIME LAG_BB LAG_BO LAG_MIDPRICE TIME_DIFF N;
run;
/* Add new obs to original data set */
proc append base=&RAWDATA data=GAPDATA;
run;
proc sort data=&RAWDATA; by Symbol Date Time; run;
proc export data=&RAWDATA (obs=99999)
outfile= 'FILLEDDATA.csv'
dbms=CSV REPLACE;
putname=YES;
run;
%mend;
我想知道这个问题的原因是什么?
答案 0 :(得分:0)
错误消息似乎很清楚:
错误:除非使用FORCE选项,否则无法对索引数据集进行排序。
您正在对数据集& rawdata进行排序。听起来像是为该数据集定义了一个索引。您无法对数据集进行排序。您可以向PROC SORT添加out=
选项以编写输出数据集而不是排序。或者您可以添加FORCE选项。我不知道这是否会删除索引或只是降低效率。