了一个一维表格。
一个TABLE语句中所使用的表格表达式涉及了三个问题;
? 在表达式中可用哪些元素作为操作数 ? 在表达式中可用哪些操作符
? 表达式的运算遵守什么样的运算规则
1)在表达式中可使用的操作数
(1)分类变量(在CLASS语句中定义,在TABLE语句的表达式中引用)或ALL分类变量对一组观测值来说,一般只有几个离散的值,可按这些值对变量分类,如yp82.sas例中的变量Titl是分类变量。 ALL称为全类符,ALL用在表达式中是表示在输出表格时给出分类的小计或总计值。
(2)分析变量(在VAR语句中定义,在TABLE语句的表达式中引用) 分析变量是可对其进行统计分析的量,如在yp82.sas例中变量Age是分析变量,它的值可用作统计计算。 (3)统计量
这里的统计量指统计学中使用的统计量,如平均值、最小值、最大值等。它们用专用符号描述,变量不能与之同名。常用的统计量有: NMISS 在分组中,包括分析变量缺项值的观测值数 N 在分组中,不包括分析变量缺项值的观测值数 MEAN 平均值 STD 标准差 MAX 最大值 MIN 最小值 RANGE 全距 SUM 和
USS 未校正平方和
CSS 对均值的校正平方和 STDERR 均数的标准误 CV 变异系数
T 检验假设总体均值为0 的student t值 PRT 绝对值大于T值的概率 VAR 方差
SUMWGT 变量值的加权和 PCTN 频数百分数 PCTSUM 和的百分数 (4)格式说明 F|FORMAT=格式
如:F=12.2说明输出格式占用12个字符宽度,其中小数位为2位。
2)在表达式中可使用的操作符 星号(*) 包含关系
空格 并列关系
圆括号 分组或说明运算次序
例yp82.sas中,分类变量Titl与ALL的关系是并列的,故表格输出时Titl的三个值各占一行,ALL的值占一行.这四行内容并列排列。分析变量.Age与统计量N、MIN、MAX和MEAN是包含关系,即Age包含N、MAX、MIN和MEAN,在表格输出时,Age(列的形式)包含 N、MIN、MAX、MEAN四项内容。
表达式的运算次序是:圆括号、包含操作、并列操作。
应当指出,所谓统计是指利用一个分类变量,对具有相同分类变量值的观测值中的一个分析变量进行统计。因此,不能把一个分析变量与另一个分析变量相包含,或者将一个统计量与另一个统计量相包含。
当规定一个分析变量而没有指出统计量时,则表示使用缺省统计量SUM;当没有规定分析变量和统计量时,则表示使用缺省统计量N。
3)TABLE语句中可使用的选择项
MISSTEXT='text' 提供多达20个字符的文本以便在包含缺项值的格子中输出信息。 RTSPACE=n
RTS=n 规定行标题的输出宽度。缺省时为LINESIZE值的1/4。 BOX=_PAGE_ BOX=变量名
BOX='串' 规定放在行标题上方的框中的文字。
3.CLASS语句
CLASS 分类变量表;
CLASS可用来说明在TABLE语句中引用的分类变量。任何在TABLE语句中出现的分类变量必须事先在CLASS语句中说明。变量的值可能是离散的或连续的,对于分类变量值为连续的情形,可通过PROC FORMAT转化为离散值。
4.VAR语句
VAR 分析变量表;
VAR一语句用来说明TABLE语句中引用的分析变量。任何用在TABLE语句中的分析变量必须事先在VAR语句中说明。分析变量必须是数值型的。
5.FREQ 和 WEIGHT语句 FREQ 变量; WEIGHT 变量;
6.FORMAT 和 LABEL 语句 FORMAT 变量格式....; LABEL 变量=标记...;
7.BY语句
BY 变量表;
8.KEYLABEL 语句
KEYLABEL keyword='text' ....;
其中,keyword是前面讨论的有效统计量名称之一,或者是全类变量ALL,而text是最多有40个字符的替换信息,text的值必须用引号括起来。 除非在TABLE语句中规定了另一个替换符串,否则在规定的关键字出现处一律用替换符串代之。
KEYLABEL语句对该过程的所有TABLE语句有效。如果对一个过程中的同一统计量规定了多个替换符串,则使用最后一次规定的替换符串。
8.3.3 举例
例:下面的程序给出3个班学生的学号(No,其中前3位为班级编号,后2位为班内编号)、三门课的成绩(SCOREl,SCORE2,SCORE3),求其平均成绩Average。平均成绩分成A、B、C(90分以上为A,60分以下为C,其他为B)三类,分析结果要给出各等成绩的人数、百分数、最大值和最小值。(yp86.sas)
data d2;
option ps=50;
input no $ socre1 score2 score3 @@; classno=substr(no,1,3);
average=mean(of score1-score3); if average>=90 then grade='A';
else if average<60 then grade='C'; else grade='B'; cards;
92101 90 91 89 92102 89 87 78 92103 61 59 67 92201 90 91 87 92205 87 61 56 92202 54 77 59 92203 96 90 91 92204 88 89 85 92206 71 49 56 92208 86 80 87 92212 76 88 90 92207 69 54 55 92210 90 88 88 92211 88 81 82 92209 78 67 65 92301 87 81 85 92302 81 78 74 92303 67 54 61 92304 88 76 75 92305 77 81 80 92306 71 70 65 92104 90 90 91 92307 90 91 93 92308 89 81 88 ;
proc tabulate formchar(1 2 3 4 5 6 7 8 9 10 11)='|----|+|---' ; title 'The Table of Student Scores';
keylabel N='Number' PCTN='Percent of Number'; class classno grade; var average;
table classno,grade all,average*(N*F=6. PCTN*F=10.2 MAX MIN) / rts=15 box='Average Scores'; run;
第四节 PLOT 过程
8.4.1 简介
PLOT是一个绘制散点图的过程。它描述数据集中两个变量的相互关系。下面是一个绘制Y=sin(x)函数关系散点图的程序。程序中DO语句产生13个x和Y的离散点对。(yp87.sas)
data d3;
do x=0 to 360 by 30;
y=sin(x*3.14159/180); output; end; proc plot; plot y*x; run;
8.4.2 语句说明
在PLOT 过程中可使用下列语句: PROC PLOT [选择项]; BY 变量表;
PLOT 绘图表达式/选择项;
在PLOT 过程中,至少要给出一个PLOT语句,在每一个PLOT语句中可以有多个绘图表达式。 1.PROC PLOT 语句
PROC PLOT [选择项];
指示PLOT 过程的开始。选择项可以是如下内容之一:
DATA=SAS数据集 指示PLOT 过程要使用的数据集,缺省时,PLOT过程使用最新建立的数据集。
UNIFORM 与BY语句有关,要求BY组的坐标刻度相同,于是可直接比较BY变量不同水平的图表。
VTOH=值 指示PLOT过程输出时纵横坐标的比例。
VPERCENT=值 指示PLOT过程产生图表长度占一页长的纵向百分率。使用VPERCENT选择项可在一页上安排尽量多的图表。例如: VPERCENT=33,使PROC PLOT过程在每页上垂直输出三个图,且每个图占一页长的三分之一。VPERCENT=50 25 25,使PROC PLOT过程输出三个图在一页上,而且第一个图是第二个图或第三个图的两倍长; VPERCENT=33 0,产生的图仅占一页的三分之一,但这一页只输出这一个图;VPERCENT=300,产生一个三页长的图表。
HPERCENT=值 指示PLOT过程产生图表宽度占行长的百分率。使用方法完全类似VPERCENT选择项。 2.BY 语句
用法见第五章。 3.PLOT 语句
PLOT 绘图表达式[/选择项];
绘图表达式采用以下格式: Y*X
其中Y、X分别代表两个用以绘图的变量,Y表示垂直坐标,X表示水平坐标。PLOT过程把平面坐标上关于X和Y的点描述在图上。一般情况下,PLOT过程用字符‘A’描述座标点,若点(X,Y)具有2对相同的离散值,则用字符‘B’描述,有3对相同的离散值时,用字符‘C’描记等等。不过,还可以直接指出描记符号,例如: PLOT A*B='*'; 请求绘制关于B、A点对的图,图上的每个点用‘*’描述;
PLOT Y*X=变量; 要求变量的值作为图上的标记。 请求绘制两个以上的图时的一些等效写法有;
PLOT(Y X)*(A B); 等效于PLOT Y*A Y*B X*A X*B; PLOT Y*(A-C); 等效于PLOT Y*A Y*B Y*C; PLOT 语句可使用如下选择项: 1)有关轴刻度的选择项
VAXIS=值表 指出垂直轴上刻度标记。
例如:PLOT Y*X/VAXIS=1O TO 20 BY 5;请求绘制Y对X的图,垂直轴上的刻度标为10、15,20。
亦可采用不均匀的刻度标记,如:PLOT Y*X/VAXIS=O 100 1000 10000; 对于数值刻度要以有序的形式排列,字符刻度可以无序。 HAXIS=值 水平刻度标记,用法同VAXIS。 2)参考线
VREF=值表 请求画平行于水平轴的直线,与垂直轴的交点由值指出。 HREF=值表 请求画垂直于水平轴的直线,与水平轴的交点由值指出。 3)覆盖图
OVERLAY 请求将PLOT语句要求的所有图组合到一页上 4)等高值图
CONTOUR=值 使PLOT过程输出的图带有灰度级的概念。带有这个选择项的PLOT语句要求如下形式:
PLOT 垂直变量*水平变量=变量/CONTOUR=值 变量为数据集中的数值变量。例如: PLOT A*B=Z/CONTOUR=1O; 要求图上点的灰度随z值变化,且使用1到10共10个灰度级。关于灰度打印字符,PLOT过程自动按升序指明用于每个等高值的绘图符号。也可以用跟在CONTOUR=值选择项后的S选择项和SLIST选择项自行选择灰度符号。例如:
PLOT Y*X/CONTOUR=5;
S1='.' S2=':' S3='!' S4='=' S5='B';
PLOT Y*X/CONTOUR=5 SLIST='.' ':' '!' '=' 'B';
8.4.3 举例
例1:等高值图
下面的程序绘制函数Z=f(X,Y)=SQRT(X*X+Y*Y)的等高值图,可以看