2016-08-17 2 views
2

У меня есть пустой набор данных, таких какпрок отчет печать пустой набор данных

data a; 
if 0; 
run; 

Теперь я хочу использовать отчет ргос для печати этого набора данных. Конечно, в отчете ничего не будет, но я хочу, чтобы одно предложение в отчете говорило: «Это нулевой набор данных». Есть идеи? Спасибо.

ответ

3

Вы можете проверить, есть ли какие-либо наблюдения в наборе данных в первую очередь. Если есть замечания, а затем использовать набор данных, в противном случае использовать фиктивный набор данных, который выглядит, как это и распечатать его:

data use_this_if_no_obs; 
    msg = 'It is a null dataset'; 
run; 

Есть много способов, чтобы проверить наборы данных, чтобы увидеть, если они содержат какие-либо замечания или нет. Мой личный фаворит - макрос% nobs, найденный здесь: https://stackoverflow.com/a/5665758/214994 (кроме моего ответа, есть несколько альтернативных подходов к выбору или поиск по Google).

Используя этот %nobs макрос мы можем определить набор данных для использования в одной строке кода:

%let ds = %sysfunc(ifc(%nobs(iDs=sashelp.class) eq 0, use_this_if_no_obs, sashelp.class)); 

proc print data=&ds; 
run; 

Вот код, показывающий альтернативный результат:

data for_testing_only; 
    if 0; 
run; 

%let ds = %sysfunc(ifc(%nobs(iDs=for_testing_only) eq 0, use_this_if_no_obs, sashelp.class)); 

proc print data=&ds; 
run; 

Я использовал proc print для упрощения примера, но вы можете приспособить его для использования proc report при необходимости.

+0

Спасибо вам большое! – Wayne

0

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

Создать пример данных с нуля obs.

data class; 
    stop; 
    set sashelp.class; 
    run; 

Проверьте, нет ли общности и не добавляется одна община с отсутствующими на всех варах. Обратите внимание, что на этом шаге не просматриваются никакие наблюдения.

data class; 
    if eof then output; 
    stop; 
    modify class end=eof; 
    run; 

сделать отчет

proc report data=class missing; 
    column _all_; 
    define _all_/display; 
    define name/order; 
    compute before name; 
     retain_name=name; 
     endcomp; 
    compute after; 
     if not missing(retain_name) then l=0; 
     else l=40; 
     msg = 'No data for this report'; 
     line msg $varying. l; 
     endcomp; 
    run; 
+0

Спасибо. Это очень полезно. – Wayne

Смежные вопросы