如何用SAS Proc freq生成带转场色彩标识的POINTS分值双向对比表
实现方案
前置数据预处理
先为原始数据集新增转场标识字段,用于后续分组和颜色映射:
data my_table_pre; set my_table; transition = catx('->', Table1, Table2); run;
方案1:PROC FREQ 分层输出带转场区分的交叉表
通过增加层变量的方式,将两类转场的交叉表分开输出,结构和你原有使用习惯一致:
Proc freq data=my_table_pre; /* 第一层为转场类型,自动分开展示两类转场的POINTS1*POINTS2频数统计 */ Tables transition*points1*points2 / norow nocol nocum nofreq nopercent; Run;
如果需要在同一张表中区分颜色,需要搭配ODS模板自定义样式,操作复杂度更高,更推荐用PROC TABULATE实现。
方案2:PROC TABULATE 单表实现交叉统计+转场颜色区分
PROC TABULATE支持自定义单元格样式,可直接按转场类型配置不同背景色,输出合并的单张交叉表:
- 先定义转场类型和颜色的映射格式:
proc format; value $trans_color 'A->B' = 'lightblue' 'A->C' = 'lightgreen' ; run;
- 执行制表过程:
proc tabulate data=my_table_pre style=[background=$trans_color.] noseps; class points1 points2 transition; /* 行维度为POINTS1,列维度为POINTS2+转场类型,可自定义展示频数/对应ID等信息 */ table points1 label='POINTS1', points2 label='POINTS2' * transition label='转场类型' * n label=' ' / misstext=' ' box='POINTS1\POINTS2'; run;
输出的表格会自动给不同转场的单元格填充对应背景色,两类转场的统计结果直接在同一张表中展示。
方案3:散点图可视化(更适合分值变化对比)
如果你的核心需求是直观对比两个分值的关联关系,散点图比表格展示效果更好:
proc sgplot data=my_table_pre; scatter x=POINTS1 y=POINTS2 / group=transition datalabel=ID markerattrs=(size=12) datalabelattrs=(weight=bold); xaxis label='Table1分值(POINTS1)' grid values=(8 to 12 by 1); yaxis label='Table2分值(POINTS2)' grid values=(8 to 11 by 1); keylegend / title='转场类型' location=inside position=topright; run;
运行后会自动为两类转场的点分配不同颜色,每个点还会标注对应ID,分值变化趋势一目了然。
内容的提问来源于stack exchange,提问作者LdM
相关产品推荐
相关产品推荐

