SAS调整柱状图频数显示以凸显结果差值咨询
SAS柱状图频数展示调整方案
你当前的代码首先存在变量映射错误:通过PROC SQL构建的graphbar表仅包含Type(类别)、SUMA(汇总频数)两个字段,但PROC SGPLOT中指定的柱状图变量是不存在的Total,需要先修正该基础问题,再按需调整频数展示规则,优化不同类别结果的差异呈现效果。
1. 基础可运行绘图代码
先修正变量映射,默认在柱子上直接展示频数数值,方便直观对比:
proc sql ; create table graphbar as select * from (select "ACTIVE" as Type length=10, sum(ak.ACTIVE) as SUMA from policy_vintage_weekly2 as ak) union (select "EXPIRED" as Type length=10, sum(wy.EXPIRED) as SUMA from policy_vintage_weekly1 as wy) ; quit; proc SGPLOT data = graphbar; vbar Type / response=SUMA /* 指定汇总频数SUMA为柱子高度对应的数值 */ datalabel /* 在柱子顶部展示具体频数值 */ datalabelattrs=(size=12 weight=bold); /* 调整数值标签的大小、粗细提升可读性 */ yaxis label="频数" grid; /* Y轴添加网格线,更方便对比高度差异 */ xaxis label="保单状态"; run;
2. 不同场景的差异化展示优化
- 若两类频数差值过大,小数值的柱子几乎不可见,可开启Y轴对数刻度,仅需要修改yaxis语句即可:
yaxis label="频数(对数刻度)" grid type=log logbase=10; - 若需要同时展示频数绝对值和占比,可新增占比字段后调整绘图参数:
/* 新增占比字段 */ proc sql; create table graphbar as select Type, SUMA, SUMA/sum(SUMA) as PERCENT format=percent7.2 from graphbar; quit; /* 同时展示频数和占比 */ proc SGPLOT data = graphbar; vbar Type / response=SUMA datalabel=SUMA datalabelpos=top seglabel=PERCENT seglabelpos=inside; yaxis label="频数" grid; xaxis label="保单状态"; run; - 若有多维度分组展示需求,可提前将多维度汇总值整理到同一张表,通过
group参数指定分组字段即可实现并列/堆叠柱状图效果。
内容的提问来源于stack exchange,提问作者user17322178
相关产品推荐
相关产品推荐

