附加到数据集后的SAS proc排序返回错误

时间:2017-05-25 01:07:37

标签: sas

我正在将数据集附加到另一个数据集,然后对基础数据集进行排序。

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;

我想知道这个问题的原因是什么?

1 个答案:

答案 0 :(得分:0)

错误消息似乎很清楚:

错误:除非使用FORCE选项,否则无法对索引数据集进行排序。

您正在对数据集& rawdata进行排序。听起来像是为该数据集定义了一个索引。您无法对数据集进行排序。您可以向PROC SORT添加out=选项以编写输出数据集而不是排序。或者您可以添加FORCE选项。我不知道这是否会删除索引或只是降低效率。