Вот более полный пример, о котором говорил @cmjohns.Он вернет 0, если он пустой, -1, если он отсутствует, и имеет опции для обработки удаленных наблюдений и предложений where (обратите внимание, что использование выражения where может заставить макрос долго работать с очень большими наборами данных).
Замечания по использованию:
Этот макрос вернет количество наблюдений в наборе данных.Если набор данных не существует, то будет возвращено -1.Я бы не рекомендовал это для использования с именами библиотек ODBC, используйте его только для таблиц SAS.
Параметры:
- iDs -
libname.dataset
, который вы хотите проверить. - iWhereClause ( Необязательно ) - А где применяется условие
- iNobsType ( Необязательно ) - Либо
NOBS
ИЛИ NLOBSF
См. SASV9 документация для описания.
Определение макроса:
%macro nobs(iDs=, iWhereClause=1, iNobsType=nlobsf, iVerbose=1);
%local dsid nObs rc;
%if "&iWhereClause" eq "1" %then %do;
%let dsID = %sysfunc(open(&iDs));
%end;
%else %do;
%let dsID = %sysfunc(open(&iDs(where=(&iWhereClause))));
%end;
%if &dsID %then %do;
%let nObs = %sysfunc(attrn(&dsID,nlobsf));
%let rc = %sysfunc(close(&dsID));
%end;
%else %do;
%if &iVerbose %then %do;
%put WARNING: MACRO.NOBS.SAS: %sysfunc(sysmsg());
%end;
%let nObs = -1;
%end;
&nObs
%mend;
Пример использования:
%put %nobs(iDs=sashelp.class);
%put %nobs(iDs=sashelp.class, iWhereClause=height gt 60);
%put %nobs(iDs=this_dataset_doesnt_exist);
Результаты
19
12
-1
Установка
Рекомендую настроить SAS AutoCall Library и поместив этот макрос в ваше местоположение авто-вызова.