在 proc sql 中按多个变量分组时为缺失值添加行

Adding rows for missing values when grouping by multiple variables in proc sql

如标题所示,我正在尝试为 proc sql.

中值为 0 的观察结果添加行

当我进行频率检查时,我得到了这个:

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; 

产生: Have

我想从 Proc Freq 创建行,为那些具有 0 个观察值的类别生成行。这可以在 proc sql 中实现,还是我也需要额外的数据步骤?

您可以在 TABLES 语句中使用 SPARSE 选项来让 PROC FREQ 包含空单元格。在 PROC SQL 中,您需要制作一个包含所有可能组合的 shell 数据集。

让我们获取一些至少有一个空单元格的示例数据:

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

我们可以使用 PROC FREQ 来生成计数。

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

或过程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;

您还可以在 PROC SUMMARY 中使用 CLASS 语句和 COMPLETETYPES 和 NWAY 选项。

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