2017-05-25 62 views
0

我正在将数据集附加到另一个数据集,然后对基本数据集进行排序。附加到数据集后的SAS proc排序返回错误

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

错误信息似乎很清楚:

错误:索引数据集可以不到位,除非FORCE选项用来进行排序。

您正在排序数据集& rawdata。这听起来像是为该数据集定义的索引。您无法对数据集进行排序。您可以在PROC SORT中添加out=选项来编写输出数据集,而不是按原样排序。或者你可以添加FORCE选项。我不知道这是否会删除索引或使其效率更低。

+0

我使用了强制选项。 –