2013-12-04 4 views
1

У меня есть набор данных с рядом записей (содержание которых не имеет значения) и ряд переменных флага в конце каждой записи. Что-то вроде этого:Желаемый отчет о пропущенных/не пропущенных значениях

Record ID Flag 1 Flag 2 Flag 3 
1   Y 
2     Y  Y 
3 
4 
5 
6   Y  Y 

Я хотел бы создать печатный отчет (или, в идеале, набор данных, который я мог бы затем распечатать), который будет выглядеть примерно следующее:

Variable N % Not Missing 
Flag 1  6 33.33333 
Flag 2  6 33.33333 
Flag 3  6 16.66666 

я могу сделать что-то близкое к тому, что я хочу для одной переменной в то время, используя Proc Freq с чем-то вроде этого:

proc freq data=Work.Records noprint; 
    tables Flag1 /out=Work.Temp; 
run; 

Я полагаю, я мог бы легко написать макрос цикл по каждой переменной и concaten съели результаты в один набор данных ... но это кажется слишком сложным для этого. Для этого должна быть встроенная процедура SAS, но я не нахожу ее.

Любые мысли там?

Спасибо!

ответ

1

Добро пожаловать в сказочный мир Proc Tabulate.

PROC TABULATE - это процедура, которую следует использовать, если PROC FREQ не может ее разрезать. Он работает аналогично PROC FREQ тем, что у него есть операторы таблицы, но помимо этого он в значительной степени зависит от стероидов.

data test; 
input RecordID (Flag1 Flag2 Flag3) ($); 
datalines; 
1 Y . . 
2 . Y Y 
3 . . . 
4 . . . 
5 . . . 
6 . Y Y 
;;;; 
run; 
proc tabulate data=test; 
class flag1-flag3/missing; 
tables (flag1-flag3),colpctn; *things that generate rows,things that generate columns; 
run; 

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

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