SAS: Как найти набор данных в библиотеке, содержащей наибольшее количество обращений?

#sas #sas-macro

#sas #sas-макрос

Вопрос:

Поскольку в одной библиотеке содержится много наборов данных. Как я могу использовать код SAS, чтобы узнать, в каком наборе данных наибольшее количество обращений? Предположим, имя библиотеки «SASHELP».

Спасибо!

Комментарии:

1. Что вы подразумеваете под «обращениями»? Вы имеете в виду количество записей («наблюдений» в SAS)? Это имя столбца? Пожалуйста, отредактируйте свой вопрос, чтобы привести пример, который поможет объяснить, что вы имеете в виду.

Ответ №1:

Семейство таблиц SQL dictionary.* предоставляет доступ ко всем видам метаданных. Будьте осторожны, некоторые запросы по словарю могут вызвать большую активность при сборе запрошенной информации.

Из документов:

Как просмотреть таблицы СЛОВАРЯ

СЛОВАРНЫЕ таблицы и производительность

Когда вы запрашиваете таблицу СЛОВАРЯ, SAS собирает информацию, относящуюся к этой таблице. В зависимости от запрашиваемой таблицы СЛОВАРЯ этот процесс может включать поиск библиотек, открытие таблиц и выполнение представлений SAS. В отличие от других процедур SAS и этапа DATA, PROC SQL может улучшить этот процесс, оптимизировав запрос перед запуском процесса select. Поэтому, хотя можно получить доступ к информации таблицы СЛОВАРЯ с помощью процедур SAS или шага ДАННЫХ с использованием представлений SASHELP, часто более эффективно использовать вместо этого PROC SQL.

Примечание: SAS не поддерживает информацию таблицы СЛОВАРЯ между запросами. Каждый запрос таблицы СЛОВАРЯ запускает новый процесс обнаружения.

Пример:

 * Use dictionary.tables to get the names of the tables with the 10 most rowcount;

proc sql;
  reset outobs=10;

  create table top_10_datasets_by_rowcount as
  select libname, memname, nobs 
  from dictionary.tables
  where libname = 'SASHELP'
    and memtype = 'DATA'
  order by nobs descending
  ;

  reset outobs=max;