Добавление строк для пропущенных значений при группировании по нескольким переменным в proc sql - PullRequest
0 голосов
/ 01 ноября 2019

Как следует из названия, я пытаюсь добавить строки для наблюдений, значение которых равно 0 в proc sql.

Когда я делаю проверку частоты, я получаю это:

Proc Freq

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

proc sql; 
create table count7 as
select distinct status as d_cat, program, count(status) as count_16, 'm_cit' as m_type
from cy16
group by status, program; 
quit; 

который производит: Имеет

Я хочу создать строки из Proc Freq, который создает строки для тех категорий, которые имеют 0 наблюдений. Может ли это быть достигнуто в proc sql или мне тоже понадобится дополнительный шаг данных?

1 Ответ

0 голосов
/ 01 ноября 2019

Вы можете использовать опцию SPARSE в операторе TABLES, чтобы PROC FREQ включал пустые ячейки. В PROC SQL вам нужно будет создать набор данных оболочки для всех возможных комбинаций.

Давайте получим несколько примеров данных хотя бы с одной пустой ячейкой:

data class;
 set sashelp.class;
 where age in (15 16);
run;

Мы можем использовать PROC FREQ для генерацииcount.

proc freq data=class;
 tables age*sex/noprint sparse out=count1(drop=percent);
run;

Или PROC SQL:

proc sql ;
create table count2 as
select b.age,c.sex,coalesce(a.count,0) as COUNT 
  from (select age,sex,count(*) as COUNT 
        from class group by age,sex ) a
  full join 
       ((select distinct age from class) b
       ,(select distinct sex from class) c
       )
  on a.age=b.age and a.sex=c.sex
  order by age,sex
;
quit;

Вы также можете использовать оператор CLASS и опции COMPLETETYPES и NWAY в PROC SUMMARY.

proc summary data=class complettypes nway;
 class age sex ;
 output out=count3(drop=_type_ rename=(_freq_=COUNT));
run;
...