在windows和linux操作系统,ODS graphics默认打开的,在批量模式或者其他操作系统下ODS graphics默认是关闭的,可以使用ODS GRAPHICS ON 来打开,则SAS 在proc 步进行数据分析时会输出相应的图形,如果不想SAS 输出图形,可以使用ODS GRAPHICS OFF来关闭。
在SAS中可以使用PROC SGPLOT来创建单张图,或者使用PROC SGPANEL基于分类变量来创建多张图,图形分类如下:
类型 图形形式
X Y 图形, band,bubble,ellipse,high-low,loess,needle,penalized B
spline,regression,scatter,series,and vector
连续变量分布图 box,density,histogram
分类变量分布图 dot,bar,line
同样如表格输出,图形输出也可以使用style template(格式模板)来定义输出的图形形式,使用方式如下:
ODS LISTING STYLE=JOURNAL (该格式模板只运用于图形,表格输出依然保持文本形式);
值得注意的是我们需要把ODS graphice和SAS /GRAPH模块相区分,后者是需要单独购买的模块,输出图形更多样且更复杂;而前者绑定在SAS/BASE模块中 。
1. 绘制条状图,程序如下:
proc sgplot ;
vbar variable-name/options ;(vbar 是纵向条状图,hbar是横向条状图)
常用选项options 如下:
alpha =n 定义置信限(默认是0.05,即95%置信区间)
barwidth=n 定义条带的宽度,宽度从0.1-1;默认是0.8;
datalabel=variable-name 给每个条带加标签,如果设置了variable-name,则把标签为该变量的值,如果未设置则为自身变量值
discreteoffset=n 将图形从中心位置偏移,取值是-0.5到0.5,取值为正向右偏移或向下偏移,取值为负向左偏移或向上偏移;
limitstat=clm/stddev/stderr 为条带设置上下限,不能与GROUP=选项合用,且必须与RESPONSE=和 STAT=MEAN选项合用后才能生效。
missing 为缺失值单独设置一条条带
group=variable-name 分组画图
groupdisplay=cluster/stack 分组后的条带如何集中展示,堆嵌或者集中
response=variable-name 需要计算统计量的变量
stat=freq/mean/sum 在没有response变量的下默认计算频数,如果有response变量默认求和
transparency=n 设置条带的透明度,在0-1之间,0是完全不透明,1完全透明。
2.创建直方图和密度曲线,基本格式如下:
proc sgplot ;
histogram variable-name/options;
常用options选项如下:
binstart = n 设置第一个箱子(bin)的中心
binwidth=n 设置箱子的宽度,其单位是横轴单位,如果存在NBINS=选项,则该选项自动忽略
nbins=n 设置箱子个数
scale=percent/count/proportion 设置纵轴显示尺度
showbins 在箱子中心点显示刻度轴 ,默认是根据最小值和最大值常规显示
transparency=n 含义同上
创建密度曲线基本格式如下:
proc sgplot;
density variable-name/options;
常用options选项如下:
type=normal/kernel 设置曲线形式,默认是normal
transparency=n 设置透明度,含义同上
histogram和density语句可以同时使用但是不可以与其他绘制图形语句同时使用,值得注意的是多个绘图语句可以同时合用,但是用在后面的语句会在前面绘制好的图形上新增一个图层,需要避免后用的图层遮盖前面绘制的图层。
举例如下:
proc sgplot data=contest;
histogram numberbooks /binwidth=2 showbins scale=count;
density numberbooks/type=normal;
density numberbooks/type=kernel;
title "reading contest";
run;
结果如下:
3.创建box-whisker图形(箱线图)
连续数据还可以使用box-whisker来查看数据分布,箱线图示意如下:
上限=q3+w*(q3-q1),下限=q1-w*(q3-q1),在范围外的值将标注离群值,默认的w值为1.5。
创建箱线图的基本命令如下:
proc sgplot ;
vbox variable-name/options;(hbox表示横向箱线图,vbox表示纵向箱线图)
常用options选项如下:
category=variable-name 设置一个分类变量,一个分类值一个箱式图
extreme 设置whiskers应该极大以至上下限为真实的最大值和最小值,没有离群值
group=variable-name 在第一个分类变量上再划分第二个分类变量,每个分类变量一个箱式图
missing 将分类变量的缺失值看成一个组别来绘制箱式图
transparency=n 透明度,含义同上
举例如下:
proc sgplot data=bikerace;
vbox numberlaps/category=division;
title "Bicycle Criterium Results by Division"
run;
4.创建散点图,基本格式如下:
proc sgplot ;
scatter x=horizontal-variable y=vertical-variable /options;
常见options如下:
datalabel=variable-name 给每个点加标签,如果设置variable-name 则标签为该变量值,如果未设置variable-name,则标签为Y变量值
group=variable 将观测点值按group设定的值汇总标识
nomissinggroup 如果group含有缺失值则缺失值对应的观测点不显示
transparency=n 透明度,0-1,0表示完全不透明,1表示完全透明
5.创建折线图,基本格式如下:
proc sgplot ;
series x=horizontal-variable y=vertical-variable /options;
常见options如下:
curvelabel="text-string" 设置曲线标签,如果没有设置text-string,则默认使用y轴标签
datalabel=variable-name 为每个观测点加标签,如果设置了variable-name,则使用该变量值,如果未设置variable-name,则使用因变量值
group=variable-name 将观测点按group值汇总起来,每个组别一条折线
makers 在折线外,标记每个数据点,
nomissinggroup 如果group=variable-name里面的变量值有缺失,则缺失值对应的观测点未不显示
transparency=n 透明度,取值0-1,0表示完全不透明,1-表示完全透明
值得注意的是SAS连接这些点的起始顺序是它们在SAS里面的出现的顺序,所以根据需求必要时提前按照相应变量排序。
举例如下:
proc sgplot data=electricity;
series x=Time y=kwh /markers;
title "Hourly Use of Electricity";
run;