资源描述
第二十一课 条形图、圆饼图和星形图
与PLOT过程和GPLOT过程的关系一样,PROC CHART过程是用来画易生成的低分辩率的图形,输出在OUTPUT窗口。而PROC GCHART过程是用来生成定制的、高分辨率的图形,输出在GRAPH窗口。在这里我们将只介绍GCHART过程。使用GCHART图表可以形象地表示变量的取值大小和两个以上变量之间的关系。可以绘制垂直和水平的条形图、块形图、圆饼图、星形图等。
一. PROC GCHART过程的功能和语句说明
GCHART过程不仅能把输入数据集中的变量值以各种图形的方式显示出来,而且能把输入数据集中的一个或多个变量按分组进行各种统计计算,然后再把统计结果以图形的方式显示出来。也就是说,GCHART过程具有统计和显示图表的两大功能。
1 PROC GCHART过程的一般格式
GCHART过程一般由下列语句控制:
Proc Gchart DATA=数据集 ;
VBAR 变量列表 </<通用选项列表><VBAR专用选项列表>>;
HBAR 变量列表 </<通用选项列表><HBAR专用选项列表>>;
BLOCK 变量列表 </<通用选项列表><BLOCK专用选项列表>>;
PIE 变量列表 </<通用选项列表><PIE专用选项列表>>;
STAR 变量列表 </<通用选项列表><STAR专用选项列表>>;
By 变量列表 ;
Run ;
在PROC GCHART语句后面可以跟随着任何多个图形要求的语句,如上面的VBAR、BLOCK等语句。也就是一个GCHART过程能够对一个指定的数据集画出任意多个各种不同的图形。
每一个图形要求语句需要指定一个图形变量或多个图形变量用于将它们的值画图。由于每个图形要求语句的选项众多,将它们的选项分成两部分:通用选项列表和专用选项列表。所谓通用选项列表是指这些选项可以用在每个图形要求语句中,而专用选项列表指这些选项只有本语句可使用。
在PROC GCHART过程的使用时,常常选用BY语句。BY语句指定一个变量或多个变量后,将按指定的变量进行分组处理,然后按每一个被BY语句指定的变量分组生成分开的图形。
我们以VBAR图形要求语句为例来说明各个图形要求语句的基本使用情况。VBAB语句用来列出用户想要画的垂直条形图的那些变量。每个图形变量对应一张垂直条形图。每张图表占一页。垂直条形图的纵坐标轴用来表示频数、累计频数、百分数、累计百分数、总和或平均值。在每个条形图的横坐标轴上都标有该图形变量的各个对应值。如果图形变量是字符变量或离散的数值变量,那么在对应的横坐标上将标记真实值;如果图形变量是连续变量,那么在对应的横坐标上将标记变量值的区间中点。
除此之外,在PROC GCHART过程中还可以使用AXISn、LEGENDn、PATTERNn、TITLEn、FOOTNOTEn、NOTE、DONUD语句。
2 PROC GCHART过程的三要素
由PROC GCHART过程产生图形要决定以下三个要素:
(1). 选择图形的表示方法
下面的几种图形至少要选一种:
l VBAR语句——绘制垂直条形图或垂直直方图。
l HBAR语句——绘制水平条形图或水平直方图。
l BLOCK语句——绘制块形图。
l PIE语句——绘制圆饼图。
l STAR语句——绘制星形图。
通过对上面不同语句的选择,确定图形的表示方法。在每种图形中,由图表变量确定的值画出对应大小的条图或线段。
(2). 选择变量的统计量
在选定了图形以后,可以在语句后面的选项中,通过TYPE选项来选择对变量的不同统计量,TYPE的缺省值是FREQ,然后将统计量以条形或线段表示。统计量的类型有:
l TYPE=FREQ——统计图形变量的各个给定值或间隔的频数。
l TYPE=CFREQ——统计图形变量各个给定值或落入给定区间的累计频数。
l TYPE=PCT——统计图形变量各个给定值或落入给定区间的观测数的百分比。
l TYPE=CPCT——统计图形变量各个给定值或落入给定区间观测数的累计百分比。
l TYPE=SUM——统计图形变量所有值的总和。
l TYPE=MEAN——统计图形变量所有值的平均值。
例如:VBAR X / TYPE=MEAN 语句,指对输入数据集中的X变量求平均值,然后将平均值用垂直条形图显示。
(3). 选择分组特性
可以使用图形选择语句后面的一些选项,来控制在语句中指定的图形变量的分组,下面的选项可控制如何进行分组:
l DISCRETE——把一个数字变量当成离散变量,而不是连续变量。把每一个数字值作为图形的一个分开的条形或线段。如果省略该选项,过程则假定变量都是连续的。如果没有规定选项MIDPOINTS=或LEVELS=,过程自动选择图表的间隔。
l GROUP=变量——用于对指定变量进行并排分组。
l SUBGROUP=变量列表——将条形或线段按照指定变量的值分成段。
l MIDPOINTS=数值列表——规定连续性图形变量按数字列表中的中心点数字次序进行排列。缺省值为,如果图形变量是数字型,过程将自动计算各个中心点值;如果图形变量是字符型,或是数字型但选择了DISCRETE选项(即离散型数字变量),过程为每个图形变量的不同值产生一个中心点值。
l LEVELS=数字——指定数字型图形变量的条形或线段个数。
l SUMVAR=变量——指定用于计算总和或均数的变量。
3 通用和专用选项列表
通用选项列表中的选项是用于VBAR、HBAR、BLOCK、PIE和STAR语句的共同选项,主要是一些我们刚在上面已介绍的分组特性选项和变量统计量TYPE选项。
专用选项列表中的选项是各个不同的图形语句自己的特有选项。主要的选项见下表:
选项
应用语句
功能说明
AXIS=<最小值>最大值
VBAR、HBAR
定义坐标轴的最小值和最大值
GSPACE=间隔数
定义条形组间的间隔空间数大小
ASC/DESC
VBAR、HBAR、PIE
每组内按升序/降序显示条形及有关统计量
G100
VBAR、HBAR、BLOCK
强迫每个组的条图和统计量加到100%
BLOCKMAX
BLOCK
定义图中最高块的统计量值
ANGLE=角度数字
PIE、STAR
定义开始逆时针旋转的角度
FILL=SOLID或X
每一区域用纯色或交叉线填充
CFILL=颜色
定义图中所有文本的颜色
NOLEGEND
除了STAR
不输出SUBGROUP变量的图例
NOHEADING
BLOCK、PIE、STAR
不输出在图表顶部的抬头行
二. 条形图
条形图是利用相同宽度条形的长短或高低表现各相互对立的统计数据大小或变动的统计图。条形图可分成水平条形图(又称带形图)和垂直条形图(又称柱形图),分别用HBAR和VBAR语句实现。无论水平条形图还是垂直条形图,都有三种类型的图式:
l 简单条形图——是以若干平行且等宽的距行表现数量对比关系的一种图形,各条之间有间隙。简单条形图也称为单式条形图。图形语句的特点是无GROUP和SUBGROUP选项。
l 分组条形图——是指由每两条或以上条组成一组的条形图,组与组之间有大间隔,每组内条形之间无间隙或小间隙。分组条形图也称复式条形图。图形语句的特点是使用GROUP选项。
l 分段条形图——是以条形的全长代表某个变量的整体,条形内部的各分段长短代表各组部分在整体中所占比例的统计图,每一段之间没有间隙并用不同线条或颜色表示,各条之间有间隙。由于每个条图由若干段组成,因此分段条形图又可称作分量条形图。图形语句的特点是使用SUBGROUP选项。
下面我们通过举例来说明各种条形图的使用。
1 简单条形图
例如,我们想统计计算上证指数从1月到12月每月的平均涨跌情况。设定从INDEXSH数据集中选择1991年1月1日到1999年12月31日的观测数据作为统计计算对象。由于INDEXSH数据集包含的是周线数据,而不是日线数据,所以这些统计计算结果会有误差。为了能进行相应地统计计算和绘制出对应的条形图,必须对INDEXSH数据集先进行一些处理。由于SAS的日期值在计算机内部存储的是数字值,我们用MONTH()函数从日期值DATE中取出月份数字存放到MONTH变量中,转换形成一个新的数据集INDEXSH2,新增的这个MONTH变量取值为1~12月。然后调用PROC GCHART图表过程确定MONTH为图形变量,周涨跌CHANGE_为统计变量,统计类型为求平均值,这样将对所有相同月份的CHANGE%值求平均,并用条形长短表示。
程序如下:
Goptions reset=global gunit=pct cback=white border
htitle=6 htext=3 ftext=swissb colors=(back) ;
Libname study "d:\sasdata\mydir" ;
Data study.indexsh2 ;
set study.indexsh ;
where '31dec1990'd<date<'01jan2000'd ;
month=month(date) ;
Proc format ;
Value m_day 1='Jan' 2='Feb' 3='Mar' 4='Apr' 5='May' 6='Jun'
7='Jul' 8='Aug' 9='Sep' 10='Oct' 11='Nov' 12='Dec' ;
Proc gchart data=study.indexsh2 ;
vbar month /discrete
sumvar=change_
type=mean ;
format month m_day. ;
title 'Shanghai StockIndex' ;
title2 'Increase by an average of percent a month' ;
title3 '1991.01.01---1999.12.31' ;
Run ;
程序说明:DATA数据步由INDEXSH数据集转换形成INDEXSH2数据集,新增MONTH变量的值等于同一观测中的DATE变量中的月份值,数据集INDEXSH2去掉了原数据集中不完整月份的观测,即去掉一些头尾观测。PROC FORMAT格式化过程自定义了格式M_DAY,能将1~12个数字输出为对应的月份英文缩写。PROC GCHART过程确定对新数据集INDEXSH2绘制垂直条形图,图形变量为MONTH,由于MONTH是数字变量,故要选用DISCRETE选项,确定它为数字型离散变量。SUMVAR=CHANGE_选项确定数据集中的CHANGE_变量为计算统计量,TYPE=MEAN选项确定统计类型为求平均值,即对相同MONTH值的CHANGE_变量值求平均。
程序的运行结果显示在GRAPH窗口中,见图21-1所示。
图21-1 上证指数月涨跌百分比简单条形图
从条形图显示的统计结果中,我们可清楚地看出,上半年的机会远远大于下半年,总体投资策略应该下半年休息,年未建仓,上半年持股待涨到五、六月清仓。其中五月份是全年上涨最大的月份,七月份下跌风险较大,八月份反弹机会较大。
2 分组条形图
例如,我们有一个学生成绩数据集CLASS,记录每个学生三门课程的成绩。现在想要按每个学生分组,用条形的高低表示各自三门课程的成绩。通常对数据集中数据进行绘图前,先要检查数据集的数据库结构是否符合图形过程的要求,如果不,就不能绘制出符合人们要求的图形,需要将数据集进行适当地转换。实事上,数据集CLASS的数据库结构不满足数据库设计的1NF(第一范式),也同样不满足PROC GCHART过程对制作此图的要求。我们用DATA数据步生成一个新的数据集GCLASS,用以消除重复项TEST1、TEST2、TEST3,统一用变量TEST取代,而用COURSE变量存放不同的课程名称。为了便于理解和比较,新数据集中我们没有去掉TEST1、TEST2、TEST3变量。
用PROC GCHART过程对新数据集GCLASS绘制分组条形时,指定的图形变量是COURSE,将显示COURSE变量中各个不同值的条形;分组变量指定为NAME,将显示NAME变量中各个不同值的分组;统计变量指定为TEST,统计类型缺省为求和,将对同一分组值中同一图形变量值的各TEST值求和,本例数据中,每次求和TEST变量的记录都只有一条记录。
程序如下:
Goptions reset=global gunit=pct cback=white border
htitle=6 htext=3 ftext=swissb colors=(back) ;
Libname study "d:\sasdata\mydir";
Data study.Gclass ;
Set study.class;
COURSE='DBS' ; TEST=TEST1 ; OUTPUT ;
COURSE='MIS' ; TEST=TEST2 ; OUTPUT ;
COURSE='DSS' ; TEST=TEST3 ; OUTPUT ;
Proc print data=study.Gclass;
Title 'Study.Gclass data set';
Proc gchart data=study.Gclass;
Vbar COURSE / group=NAME
sumvar=TEST
axis=60 to 100 by 10
autoref ;
Title 'Vbar course /Group=name';
Run ;
程序说明:DATA数据步创建GCLASS数据集,将原来CLASS数据集的一条记录变成三条记录,用COURSE变量存放三门课程的名称DBS、MIS、DSS,用TEST变量存放成绩。新数据集GCLASS,用PROC PRINT打印过程输出,见图21-2所示。PROC GCHART过程中图形语句的AXIS选项,由于语句是VBAR垂直条形图,所以它指纵轴上的刻度。AUTOREF选项,是自动画参考线,通过每一个主刻度线画出相应一条垂直于刻度坐标轴的参考线。
程序的运行结果显示在GRAPH窗口中,见图21-3所示。
图21-2 符合分组条形图的GCLASS数据集
图21-3 用PROC GCHART过程绘制的分组条形图
3 分段条形图
例如,如果我们想要比较每个学生的考试总分和平均分,还能比较构成总分的各科成绩的大小,最恰当就是使用分段条形图来表示。
程序如下:
Goptions reset=global gunit=pct cback=white border
htitle=6 htext=3 ftext=swissb colors=(back) ;
Libname study "d:\sasdata\mydir";
Proc gchart data=study.Gclass;
Hbar NAME /Subgroup=COURSE
sumvar=TEST
sum
mean
ascending
ref=180 270 ;
Title 'Hbar NAME /Subgroup=COURSE' ;
Run ;
程序的运行结果显示在GRAPH窗口中,见图21-4所示。
图21-4 用PROC GCHART过程绘制的分段条形图
程序说明:PROC GCHART过程指定输入数据集为GCLASS,HBAR图形语句指定画水平条形图。图形变量指定为NAME,分段变量指定为COURSE,统计变量指定为TEST。SUM和MEAN选项指定对相同NAME值的TEST统计变量求和和求平均值。ASCENDING选项要求图形变量NAME值按升序排列。REF=180 270选项将在横坐标轴180和270处画出两条垂直参考线。要特别注意SUM、MEAN选项与TYPE=SUM或MEAN选项的区别,前者指对如WANGWU学生三门课程DBS、MIS、DSS的统计量求和、求平均,后者指对如WANGWEU学生几次DBS考试成绩求和、求平均。
三. 块形图
块形图与分组条形图和分段条形图都有点类似,最主要的区别仅在于块形图以三维立体方式显示条形。例如,我们将上面绘制分段条形图的过程进行一些修改,主要用BLOCK语句代替HBAR语句,图形变量、组变量和统计变量不变,分段选项SUBGROUP=改为分组选项GROUP=。
程序如下:
Goptions reset=global gunit=pct cback=white border
htitle=6 htext=3 ftext=swissb colors=(back) ;
Libname study "d:\sasdata\mydir";
Proc gchart data=study.Gclass;
Block NAME / group=COURSE
sumvar=TEST ;
Run ;
程序的运行结果显示在GRAPH窗口中,见图21-5所示。
图21-5 用PROC GCHART过程绘制的块形图
四. 圆饼图
圆饼图是以圆的整体面积代表被研究现象的总体,按各构成部分占总体比重的大小把原面积分割成若干扇形,用以表示现象的部分对总体的比例关系的统计图。现象的总体在SAS系统中被指定为某一研究变量,即PROC GCHART过程中,用PIE语句指定的图形变量,所要统计的变量由选项SUMVAR=变量来指定。
例如,我们要统计每个学生的平均分并对他们的成绩进行比较,查看哪个学生的考试成绩最好,哪个学生的考试成绩最差,所占比例多少。最简单方法是绘制圆饼图。
程序如下:
Goptions reset=global gunit=pct cback=white border
htitle=6 htext=3 ftext=swissb colors=(back) ;
Libname study "d:\sasdata\mydir";
Proc gchart data=study.Gclass;
Pie name /sumvar=test
type=mean
slice=arrow
percent=inside
value=arrow
explode='Wangwu' 'zhaoliu'
angle=90
ctext=black
cfill=black;
Title 'Statistic Records of Students ';
Run ;
程序说明:想要绘制理想的圆饼图,需要设置许多重要的选项。PROC GCHART过程的PIE语句,首先要指定图形变量为NAME,统计变量为TEST,统计类型为求平均值MEAN。其它的一些选项主要用于修饰图形,常用的有:
l SLICE=ARROW——每一块扇形对应的NAME值标签方式,=ARROW表示用一条线指向扇形,=INSIDE表示标签在扇形内部,=NONE表示没有标签,=OUTSIDE表示标签在扇形外部。
l PERCENT=INSIDE——每一块扇形相应百分比数的标签方式,同样有四种值,=ARROW,=INSIDE,=NONE,=OUTSIDE。
l VALUE=ARROW——每一块扇形统计值的标签方式,也同样有四种值,=ARROW,=INSIDE,=NONE,=OUTSIDE。
l EXPLODE=’Wangwu’ ‘zhaoliu’ ——把在列表中列出的NAME变量值所对应的扇形分离出去,可以从视觉上起到强调这一块扇形的目的。请注意列表中字符串要与变量NAME中值的大小写完全匹配。
l ANGLE=90——指定第一块扇形的起始的角度,缺省值为0。
l CTEXT=BLACK——设置图中所有文字为黑色,还可以其它颜色。
l CFILL=BLACK——设置图中所有文本为黑色,还可以其它颜色。
l COUTLINE=BLACK——设置扇形的轮廓线为黑色,还可以其它颜色。
l FILL=SOLID或X——设置各个扇形用颜色区别或用交叉线区别。如果无此选项,则扇形内为空白。
程序的运行结果显示在GRAPH窗口中,见图21-6所示。
图21-6 用PROC GCHART过程绘制的圆饼图
五. 星形图
星形图是把观测总体用一个360度角表示,每一构成部分等分360度角,且每一构成部分的统计量大小用一条与角中心点相连的线段长短表示,然后将各线段的顶点依此连接起来。星形图适用于周期性数据,如一年的月份或者一天的小时,也适用于成分组成数据,如描述某食品的维生素组成和大小。
例如,我们要统计上证指数九年中1月份成交量平均值、2月份成交量平均值、……12月份的成交量平均值,并用星形图表示。
程序如下:
Goptions reset=global gunit=pct cback=white border
htitle=6 htext=3 ftext=swissb colors=(back) ;
Libname Study "d:\sasdata\mydir" ;
Proc format ;
value m_day 1='Jan' 2='Feb' 3='Mar' 4='Apr' 5='May' 6='Jun'
7='Jul' 8='Aug' 9='Sep' 10='Oct' 11='Nov' 12='Dec' ;
Proc gchart data=study.indexsh2 ;
star month / discrete
sumvar=volume
type=mean ;
format month m_day. ;
title 'Shanghai StockIndex' ;
title2 '1991.01.01---1999.12.31' ;
Run ;
程序说明:数据集INDEXSH2是从INDEXSH数据集转换过来的,各条观测已经按月的数字号记录周成交量。调用PROC GCHART过程,使用STAR语句,指定图形变量为MONTH,统计变量为VOLUME,统计类型为MEAN,由于MONTH是数字变量,需要指定它为离散变量DISCRETE,将把同月号的观测按指定的统计变量和统计类型进行合并。
程序的运行结果显示在GRAPH窗口中,见图21-7所示。
图21-7 用PROC GCHART过程绘制的星形图
图形的显示结果分析,全年一、二月份的成交量最小,大概主要是农历过春节放长假的原因,然后成交量呈规律性逐月放大,至七、八月份达到最大,从图21-7上证指数月涨跌百分比中,我们知道上半年行情也是不断上涨,价量完全配合,七、八月份的大成交量和指数见顶后大幅下挫和反弹,可能跟上半年累积涨幅过大需要调整,和新股大量发行上市有关。八月份后,成交量开始逐月缩小,至下一年的一、二月份。下半年风险加大和成交量萎缩也是相互吻合的。总体上看,以十月份和四月份为分界线,十一、十二、一、二、三月份的成交量之和远远小于五、六、七、八、九月份的成交量之和值得引起注意,究其原因可能与我国的企业体制、财务制度、银行借贷、资金结构和资金来源等规律性的操作有内在关系,也就是说在上述这些因素未根本改变前,这种成交量分布的情况还将继续。
上海财经大学经济信息管理系IS/SHUFE
Page 13 of 13
展开阅读全文