SAS: ошибка сортировки (по переменной неправильно отсортирована) - PullRequest
0 голосов
/ 30 апреля 2018

Этот вопрос является продолжением другого вопроса, который у меня был здесь SAS: представление шага данных -> ошибка: по переменной неправильно отсортировано ; Я открываю новый вопрос, поскольку желаемое решение немного отличается: поскольку я перебираю несколько входных файлов, один из raw-файлов не отсортирован должным образом, мне интересно, что я мог бы сделать, чтобы моя программа пропустила этот конкретный входной файл и просто продолжить?

Цитата:

Я использую макрос для циклического обхода файлов на основе имен и извлечения данных, который отлично работает в большинстве случаев, однако время от времени я сталкиваюсь с

ERROR: BY variables are not properly sorted on data set CQ.CQM_20141113.

где CQM_20141113 - файл, из которого я извлекаю данные. Фактически мой макрос проходит через CQ.CQM_2014: и работает до 2014 года. Из-за этой единственной ошибки файл не создается.

Я использую представление шага данных, чтобы «инициализировать» данные, а затем на следующем шаге вызвать представление шага данных (пример кода с сокращенными условиями там):

%let taq_ds = cq.cqm_2014:;

data _v_&tables / view=_v_&tables;
     set &taq_ds;
     by sym_root date time_m; *<= added by statement
     format sym_root date time_m;
     where sym_root = &stock;   
run; 

data xtemp2_&stockfiname (keep = sym_root year date iprice);
     retain sym_root year date iprice; 
     set _v_&tables; 
     by sym_root date time_m;

/* some conditions */
run;

Когда я вижу ошибку в файле журнала и снова запускаю файл, он работает (иногда мне нужно несколько попыток).

Я думал о сортировке процедур, но как это сделать при использовании пошагового просмотра данных? Обратите внимание, что cqm-файлы очень большие (что также может быть причиной проблемы). Конец цитаты:

edit: я попробовал ваш код (и удалил оператор by в представлении шага данных), однако я получаю эту ошибку:

NOTE: Line generated by the macro variable "TAQ_DS".
152         cq.cqm_2013:
                       _
                       22
                       200
ERROR 22-322: Syntax error, expecting one of the following: a name, ;, (, ',', 
              ANSIMISS, AS, CROSS, EXCEPT, FULL, GROUP, HAVING, INNER, 
              INTERSECT, JOIN, LEFT, NATURAL, NOMISS, ORDER, OUTER, RIGHT, 
              UNION, USING, WHERE.  

ERROR 200-322: The symbol is not recognized and will be ignored.

NOTE: PROC SQL set option NOEXEC and will continue to check the syntax of 
      statements.
NOTE: The SAS System stopped processing this step because of errors.
NOTE: PROCEDURE SQL used (Total process time):
      real time           0.02 seconds
      cpu time            0.00 seconds



ERROR: File WORK._V_CQM_2013.DATA does not exist.

NOTE: The SAS System stopped processing this step because of errors.
NOTE: SAS set option OBS=0 and will continue to check statements. 
      This might cause NOTE: No observations in data set.
WARNING: The data set WORK.XTEMP2_OXY may be incomplete.  When this step was 
         stopped there were 0 observations and 8 variables.
NOTE: DATA statement used (Total process time):
      real time           0.02 seconds
      cpu time            0.00 seconds

1 Ответ

0 голосов
/ 30 апреля 2018

Вам нужен оператор by при создании представления?

Если нет, то сортировать из представления во временный набор данных:

proc sort data=_v_&tables out=__temp; 
     by sym_root date time_m;
run;

data xtemp2_&stockfiname (keep = sym_root year date iprice);
     retain sym_root year date iprice; 
     set __temp; 
     by sym_root date time_m;

/* some conditions */
run;

Другой вариант - создать представление в PROC SQL, добавив порядок сортировки:

proc sql noprint;
create view _v_&tables as
select <whatever>
   from &taq_ds
   where <clause>
   order by sym_root, date, time_m;
quit;
...