在 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;
如标题所示,我正在尝试为 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;