SAS NOTSORTED Эквивалент
Я использовал следующий код для анализа данных:
set taq.cq_&yyyymmdd:;
by symbol date time NOTSORTED ex;
Существуют тысячи наборов данных, на которых я запускаю код в единицах дней. Когда &yyyymmdd указывает только один набор данных (на один день, например, 20130102), это работает. Однако, когда я пытаюсь запустить его для нескольких наборов данных (например, 201301:), SAS возвращает следующие ошибки:
BY NOTSORTED/NOBYSORTED cannot be used with SET statement when
more than one data set is specified.
Если я не могу использовать NOTSORTED здесь, какое эквивалентное утверждение я мог бы использовать?
Мое понимание ключевого слова NOTSORTED заключается в том, что вы используете его, когда данные еще не отсортированы. Следовательно, мне нужно сначала отсортировать это? Как это сделать?
Меня также смущает количество переменных, на которые ссылается NOTSORTED. Влияет ли это только на "время" или на "символ, данные, время"?
Большое спасибо!
UPDATE # 2:
Остальная часть процесса, следующего сразу за оператором set: (псевдокод, поскольку у меня нет разрешения на публикацию исходного кода)
Data _quotes;
SET STATEMENT HERE
Change the name of a variable in the dataset (Variable name is EXN).
last.EXN in a if statement. If the condition is satisfied, label EXN.
Drop some variables.
Run;
DATA NEWDATASET (sortedby= SYMBOL DATE TIME index=(SYMBOL)
label="WRDS-TAQ NBBO Data");
SET _quotes;
by symbol date time;
....
Run;
2 ответа
NOTSORTED означает, что SAS может предположить, что порядок сортировки в данных правильный, поэтому он, возможно, не прошел явную сортировку PROC, но в логическом порядке, как указано в операторе BY.
Все переменные в операторе BY включены в параметр NOTSORTED. Учитывая, что я подозреваю, что вы полностью не понимаете обработку группы BY. Обычно это немного опасно в использовании, особенно если вы не понимаете обработку группы BY. Если ваши данные находятся в той же группе, но не соседствуют, они не будут работать должным образом и не приведут к ошибке. Правильный обходной путь зависит от ваших процессов, чтобы быть честным.
Я бы предложил ознакомиться с документацией по обработке группы BY. Это довольно глубоко и имеет много образцов, чтобы проиллюстрировать различные типы расчетов.
http://support.sas.com/documentation/cdl/en/lrcon/69852/HTML/default/viewer.htm
NOTSORTED часто используется в примерах постов, чтобы избежать сортировки или при использовании пользовательской сортировки, которую сложно реализовать другими способами. Явная сортировка устранит эту проблему, но вы также можете неправильно понять, как SAS обрабатывает данные, когда у вас есть оператор SET с оператором BY. Я считаю, что это называется чередованием.
http://support.sas.com/documentation/cdl/en/lrcon/69852/HTML/default/viewer.htm
Я подозреваю, что ключевое слово NOTSORTED используется для поиска групп для наблюдений с одинаковым значением для переменной EX в пределах одного символа, даты и времени. Если вам нужно только найти FIRST, вы можете использовать функцию LAG() для вычисления флага FIRST.EX.
data want;
set taq.cq_&yyyymmdd:;
by symbol date time;
first_ex = first.time or ex ne lag(ex);
В противном случае, возможно, вы захотите преобразовать процесс в представления шагов данных, а затем установить представления вместе.
data work.view_cq_20130102 / view=work.view_cq_20130102;
set taq.cq_20130102;
by symbol date time ex NOTSORTED;
...
run;
...
data want ;
set work.view_cq_201301: ;
by symbol date time;
...