SAS(Statistical Analysis System)作为一款功能强大的统计分析软件,其作图命令(主要通过GRAPH模块和ODS图形系统实现)能够满足从基础统计图表到高级可视化分析的需求,掌握SAS作图命令的核心语法与参数配置,是高效输出专业图形的关键,以下从基础命令、高级定制及常用图表类型三个维度展开说明。

SAS作图基础命令与流程
SAS作图主要通过PROC SG
系列过程(如SGPLOT、SGSCATTER、SGRENDER等)和传统PROC GPLOT
实现,其中SG
系列过程基于ODS(Output Delivery System)输出,语法更简洁且支持现代图形样式,基础作图流程通常包括:
- 启用ODS输出:通过
ODS GRAPHICS ON
语句设置图形输出环境(如尺寸、分辨率); - 调用过程步:选择对应的过程步并指定数据集;
- 绘图语句:如
XAXIS
、YAXIS
定义坐标轴,SERIES
绘制折线,SCATTER
绘制散点等; - 输出图形:通过
ODS GRAPHICS OFF
关闭图形输出,并指定输出格式(如PNG、PDF)。
使用PROC SGPLOT
绘制简单散点图的基本代码如下:
ods graphics on / width=640px height=480px imagename="scatter_plot"; proc sgplot data=sashelp.class; scatter x=height y=weight / markerattrs=(symbol=circle size=10px color=blue); xaxis label="身高(英寸)" grid; yaxis label="体重(磅)" grid; run; ods graphics off;
常用图表类型及对应命令
基础统计图表
- 散点图与折线图:
SCATTER
语句搭配SERIES
语句可展示变量间趋势,在PROC SGPLOT
中同时绘制散点和拟合直线:proc sgplot data=sashelp.class; scatter x=height y=weight; reg x=height y=weight / lineattrs=(color=red thickness=2); run;
- 柱状图与条形图:
VBAR
(垂直柱状图)或HBAR
(水平条形图)语句用于分类数据统计,按性别统计平均身高:proc sgplot data=sashelp.class; vbar sex / response=height stat=mean datalabel; xaxis label="性别"; yaxis label="平均身高(英寸)"; run;
- 直方图与密度图:
HISTOGRAM
语句绘制直方图,DENSITY
语句叠加密度曲线,适用于数据分布分析:proc sgplot data=sashelp.class; histogram weight / scale=count binwidth=10; density weight / type=kernel lineattrs=(color=green); run;
高级可视化图表
- 箱线图:
BOXCHART
或VBHBOX
语句展示数据分布与异常值,支持分组(如按性别分组):proc sgpanel data=sashelp.class; panelby sex / layout=columns 2; vbox height / category=sex; run;
- 散点图矩阵:
PROC SGSCATTER
的MATRIX
语句可快速展示多变量两两关系:proc sgscatter data=sashelp.class; matrix height weight age / diagonal=(histogram normal); run;
- 时间序列图:
SERIES
语句结合XAXIS
的type=time
参数处理时间数据,data time_data; input date:date9. value; format date date9.; cards; 01JAN2023 10 02JAN2023 12 03JAN2023 15 ; run; proc sgplot data=time_data; series x=date y=value / lineattrs=(color=blue); xaxis type=time label="日期" interval=day; run;
图形定制与美化参数
SAS作图支持丰富的定制选项,通过语句参数调整图形细节:
- 颜色与样式:
color
指定颜色(如color=cyan
),markerattrs
设置散点样式(如symbol=star size=8px
); - 坐标轴与标题:
XAXIS/YAXIS
的label
、grid
、values
等参数调整坐标轴属性,TITLE
/FOOTNOTE
添加全局标题; - 图例与注释:
LEGEND
语句控制图例位置(如position=topright
),INSET
添加文本注释框。
通过以下代码增强柱状图的可读性:

proc sgplot data=sashelp.class; vbar sex / response=weight stat=sum datalabel datalabelattrs=(size=12px) fillattrs=(color=lightblue) transparency=0.3; xaxis label="性别" valueattrs=(size=11px); yaxis label="体重总和(磅)" valueattrs=(size=11px) grid;"不同性别体重总和对比" textattrs=(size=14px weight=bold); keylegend / position=top title="性别分布"; run;
图形输出与格式控制
通过ODS GRAPHICS
的全局语句可统一控制图形输出格式,
ODS GRAPHICS ON / width=800px height=600px imagefmt=png
:设置输出尺寸为800×600像素,格式为PNG;ODS LISTING CLOSE; ODS PDF FILE="report.pdf";
:将图形输出至PDF文件,避免在输出窗口显示。
相关问答FAQs
Q1:如何在SAS图形中添加参考线(如均值线)?
A:在PROC SGPLOT
中,使用REFLINE
语句可添加参考线,为散点图添加Y轴的均值参考线:
proc sgplot data=sashelp.class; scatter x=height y=weight; refline 100 / axis=y label="参考值(100)" lineattrs=(color=red pattern=dash); run;
Q2:如何将多个子图合并为一张复合图?
A:可通过PROC SGRENDER
结合GRAPH
模板语言(GTL)实现,或使用PROC SGSCATTER
的MATRIX
语句绘制散点图矩阵,更简单的方式是PROC SGPANEL
的PANELBY
语句,例如按性别分面绘制多组箱线图:
proc sgpanel data=sashelp.class; panelby sex / columns=2 novarname; vbox height / category=age; colaxis label="年龄"; rowaxis label="身高"; run;
