Шаги PROC SQL индивидуально представляют собой отдельные шаги по обработке данных, поэтому в определенном смысле вы всегда получаете идентичную информацию от SAS. То, что вы просите, - это эффективно, как узнать, как долго «выбирать имя» берется против «empid».
Нет прямого способа получить синхронизацию отдельного оператора на шаге данных, но вы можете написать код шага данных, чтобы узнать. Проблема в том, что шаг данных выполняется по-разному, поэтому он действительно сильно отличается от данных PROC SQL STIMER; почти ничего, что вы делаете на шаге данных, займет очень много времени, если только вы не делаете что-то более сложное, как поиск хеш-таблицы. Набирает много времени, прежде всего, записывая данные и считывая данные в секунду.
У вас есть несколько вариантов устранения длинных шагов данных, если это вас беспокоит. ОПЦИИ MSGLEVEL = Я дам вам информацию об использовании индекса, сведениях о слиянии и т. Д., Что может быть полезно, если вы не знаете, почему это занимает много времени, чтобы сделать определенные вещи (см. http://goo.gl/bpGWL в документации SAS для получения дополнительной информации). Вы можете написать свой собственный штамп времени:
data test;
set sashelp.class sashelp.class;
_t=time();
put _t=;
run;
Шансы, что не будет показывать вам много использования, поскольку большинство шагов данных итераций не займет очень много времени, но если вы делаете что-то фантазии, это может помочь. Вы также можете использовать условные операторы только для печати времени через определенные промежутки времени - например, при FIRST.ID в процессе, который работает BY ID ;.
В конечном счете, хотя информация, которую вы уже получили из заметок, является наиболее полезной. В PROC SQL вам нужна информация STIMER, поскольку SQL выполняет сразу несколько действий, в то время как SAS позволяет/заставляет вас делать все пошагово. Пример:
PROC SQL;
create table X as select * from A,B where A.ID=B.ID;
quit;
является один шаг - но в SAS это будет:
proc sort data=a; by ID; run;
proc sort data=b; by ID; run;
data x;
merge a(in=a) b(in=b);
by id;
if a and b;
run;
Для этого вы получите информацию о продолжительности каждого из этих этапов (двух сортов и слияния) в SAS, что похоже на то, что STIMER скажет вам.
+1 Хороший ответ. Вы можете уточнить, что поиск в хеш-таблице довольно мгновен (они занимают столько времени, сколько требуется для хеш-значения, которое в принципе ничего не значит, поскольку алгоритм хэширования очень эффективен), но загрузка хэш-таблицы в память может занять некоторое время , –