Могу ли я получить некоторый текст по умолчанию / пустой для отображения, если ОТЧЕТ PROC не генерируется из-за отсутствия действительных данных? - PullRequest
1 голос
/ 07 октября 2009

У меня есть программа SAS, которая перебирает определенные наборы данных и генерирует кучу отчетов в пункт назначения ODS HTML.

Иногда из-за небольших наборов данных, для которых я запускаю эти отчеты, определенный PROC REPORT не будет сгенерирован, потому что для этого набора данных, который я включаю, нет данных для отчета. Я получаю это сообщение для тех случаев:

ВНИМАНИЕ: переменная GROUP, ORDER или ACROSS отсутствует в каждом наблюдении.

В HTML я хочу отобразить какое-то сообщение для них, например «не сгенерировано» или что-то в этом роде.

Я пытался использовать коды возврата / ошибки или текст предупреждения выше, чтобы обнаружить это, но код ошибки равен 0 (не проблема, правда?), И текст предупреждения не сбрасывается, если следующий PROC REPORT генерирует OK.

Если это имеет какое-либо значение, я использую шаг данных с CALL EXECUTE, чтобы получить весь этот код PROC REPORT, сгенерированный для этих наборов данных.

Есть ли способ сгенерировать это сообщение "не сгенерировано" или, по крайней мере, перехватить эти предупреждения в соответствии с PROC REPORT?

Ответы [ 2 ]

1 голос
/ 13 апреля 2010

См .: http://www2.sas.com/proceedings/sugi26/p095-26.pdf

Найдите макрос MTANYOBS и раздел о печати страницы без наблюдений.

1 голос
/ 07 октября 2009

Вы можете заменить значение отсутствующими наблюдениями в своем отчете.

Сначала переопределите пропущенные значения для некоторого символа. Я думаю, что вы можете использовать только один символ, хотя я могу ошибаться.

options missing='M';run;

Затем убедитесь, что вы используете «отсутствует» в вашем PROC REPORT.

proc report data=somedata nowd headline missing;
....
run;

РЕДАКТИРОВАТЬ НА ОСНОВЕ КОММЕНТАРИЙ

Чтобы получить комментарии для отображения, я вижу несколько возможностей.

Во-первых, отсканируйте набор данных и проверьте, нет ли пропущенных значений. Если они есть, выбросьте сообщение.

Data _Null_;
  Set dataset;
  file print notitles;
  if obs = . then do;
    put @01 'DID NOT COMPUTE';
    stop;
  end;
run;

Два, добавить столбец с вычислением:

define xx /computed "(Message)";    
compute xx /char length=16 ;
if obs =. then xx = 'did not compute value in row';

Три, условная строка с использованием compute:

compute after obs;
  if obs = . then do;
     line @1 "DID NOT COMPUTE";
  end;
endcomp;

endcomp;

...