如何保存SAS GBARLINE生成线柱图的分箱均值输入表?
解决SAS GBARLINE保存分箱均值数据集的问题
我来帮你轻松搞定这个需求!不用手动写分箱代码,只需要在SAS任务生成的GBARLINE代码里加个小参数,就能把25等距箱对应的各变量均值数据集保存下来,后续标准化变量后直接复用就行。
两种常见场景的处理方法
场景1:直接用PROC GBARLINE的自动分箱功能
如果你的SAS任务生成的代码是通过NBINS=25参数让PROC GBARLINE自动对var1分25等距箱,那只需要在PROC GBARLINE语句里添加OUTSTAT=参数,指定要保存的数据集名即可:
/* 修改后的GBARLINE代码,添加OUTSTAT保存汇总数据 */ PROC GBARLINE DATA=你的原始数据集 OUTSTAT=box_summary_data; BLOCK var1 / DISCRETE NBINS=25; /* 自动生成25个等距箱 */ PLOT default * lin_var1 sigmoid_var1 square_var1 cubic_var1 log_var1 / MEAN; /* 计算各变量箱内均值 */ RUN;
执行这段代码后,box_summary_data就是你要的目标数据集,里面包含每个分箱的标识、default及各个转换变量的均值结果。
场景2:SAS任务先分箱再汇总绘图
有些SAS任务会先通过PROC RANK完成分箱,再用PROC SUMMARY计算均值,最后调用GBARLINE绘图。这种情况下,只需要在PROC SUMMARY的OUTPUT语句里指定输出数据集:
/* SAS任务生成的分箱步骤(无需修改) */ PROC RANK DATA=你的原始数据集 OUT=ranked_data GROUPS=25; VAR var1; RANKS var1_bin; /* 生成分箱标识变量 */ RUN; /* 修改SUMMARY步骤,添加OUT保存均值数据集 */ PROC SUMMARY DATA=ranked_data NWAY; CLASS var1_bin; VAR default lin_var1 sigmoid_var1 square_var1 cubic_var1 log_var1; OUTPUT OUT=box_summary_data MEAN=; /* 将各变量均值保存到数据集 */ RUN; /* 原GBARLINE绘图步骤(无需修改) */ PROC GBARLINE DATA=box_summary_data; BLOCK var1_bin / DISCRETE; PLOT default * lin_var1 sigmoid_var1 square_var1 cubic_var1 log_var1; RUN;
这里的box_summary_data同样会完整保留所有分箱的均值信息,后续你对var1做标准化处理后,只需要把上述代码中的var1替换成标准化后的变量,就能快速生成新的线柱图。
后续复用小技巧
保存好box_summary_data后,如果你需要对变量做标准化(比如Z-score标准化),只需要:
- 对原始数据集中的
var1进行标准化处理,生成新变量std_var1; - 重复上述分箱、汇总的步骤(或者直接调整保存的数据集里的分箱标识关联标准化后的值);
- 用新的汇总数据集调用PROC GBARLINE绘图即可。
内容的提问来源于stack exchange,提问作者78282219
相关产品推荐
相关产品推荐

