SAS Statistical Analysis System

Download Report

Transcript SAS Statistical Analysis System

SAS
Statistical Analysis System
程 振 源
www.statistics.mentors.cn
学习目的与要求
•
•
•
•
•
•
•
1.了解SAS系统的功能特点;
2.熟悉SAS系统的操作环境;
3.掌握SAS系统的有关概念;
4.学会使用DATA步建立数据集,能对现有数据集
进行基本操作;
5.学会使用PROC步的基本过程对数据集进行常规
的统计分析;
6.学会自己查看系统帮助;
7.能够利用SAS系统处理常见的经济数据并能根
据所学的统计知识对计算结果进行解释
第一章 SAS概述
SAS系统是世界领先的信息系统,它由最初的用
于统计分析经不断发展和完善而成为大型集成应用
软件系统,具有完备的数据存取、管理、分析和显
示功能。在数据处理和统计分析领域,SAS系统被
誉为国际上的标准软件系统。
SAS系统于1966年由美国North Carolina州立大
学开始研制,1976年成立美国SAS软件研究所公
司,并开始对SAS系统进行维护、开发、销售和培
训等工作。1985年推出了SAS/PC(6.02)版本。
自SAS系统推出以来,它的版本更新很快,功能也
不断增加,1998年推出6.12版,现在已有9.1版
面世。
• 美国SAS软件研究所自创建以来,就以SAS系
统的卓越功能和可靠的技术支持著称于世,逐
步发展成为全球最大的独立软件开发商之一。
目前SAS软件研究所在世界六大洲的60个国
家设有分公司及分支机构。世界上有120个国
家和地区的30000多个机构在使用SAS系统,
直接用户超过三百万。SAS系统在世界范围内
被广泛地应用于政府、科研、教育、生产和商
业等不同领域,发挥着积极的作用。
§1
SAS系统的特点
• SAS系统:
SAS系统是一个模块化的集成软件系统。所谓软件系
统就是一组在一起作业的计算机程序。使用SAS系统的用
户可以根据自己的需要,随时作出明智的选择。SAS系统
是一种模块化的组合软件系统。基本部分是Base SAS模块,
此外还有用于统计分析的SAS/STAT模块;用于高级绘图
的SAS/GRAPH模块;用于矩阵运算的SAS/IML模块;用
于运筹学和线性规划的SAS/OR模块;用于经济预测和时
间序列分析的SAS/ETS模块等。
• SAS系统的特点:
1 操作简便:SAS的宗旨是为所有需要进行数据处理、数据
分析的非计算机专业人员提供一种易学易用、完
2
3
整可靠的软件系统。用户把要解决的问题用SAS语言(近
乎自然英语的非过程语言)表达出来,组成SAS程序,提
交给SAS系统就可以解决所提出的问题。执行情况和输
出结果都在屏幕上显示出来。
SAS系统将数据管理与统计分析溶为一体:
SAS程序的结构由两个基本步骤任意组合而成。DATA
步用于对数据的加工处理;PROC步用于分析数据和编
写报告。SAS系统克服了通常软件或偏重于数据管理功
能或偏重于统计分析的弊病,把数据管理与统计分析有
机地结合在一起。
适用性强、应用面广:
SAS系统适用于任何经验的人员(初学者或有经验的用
户);适用于任何类型的数据;适用于几乎是任何应用
的需要;适用于任何计算机环境;适用于今日与未来
(扩展性能强)。
§2
Base SAS模块简介
Base SAS模块是SAS系统的核心。主要功能是数据管理
和数据加工处理,并有报表生成和描述统计的功能。
Base SAS模块可以单独使用,也可以同其它模块产
品一起组成一个用户化的SAS系统。Base SAS模块
提供以下几方面的功能:
一、数据管理功能
1 信息存贮和检索:
SAS系统可用任何格式读入数据,然后把数据组成
SAS数据集;并可用文件操作管理方法把不同数据
集的数据组合在一起,供SAS过程分析处理
2 数据修改与程序设计:
3
SAS系统为用户提供完备的SAS语句和函数用于数据加工
处理。有些语句用于执行标准操作,如建立新变量、累加
求和及修改错误等;另外还提供了DO/END、IFTHEN/ELSE等控制语句,构成一套完整的语言系统。由
于Base SAS模块具有非常强的数据管理功能,所以许多
人亦把它作为数据库管理系统。
文件操作:
数据分析常常需要从几个数据集中抽取一些变量和观测进
行组合。Base SAS模块中有用于对数据进行编辑、整理、
连接、合并及更新的功能,还能同时处理多个输入文件,
或者对一次输入的数据能够生成几种报表等。
二 、基础统计计算功能
Base SAS模块中有一些基本过程和SAS函数能够完成基
础统计计算,包括:
• 计算简单的描述统计量,如均值、标准差、极差、总和、
•
•
•
平方和、偏度、峰度、分位数和相关系数等;
对数据进行标准化、求秩及有关统计量;
生成并分析列联表;
SAS函数可用于计算概率分布函数、分位数、样本统计
量及产生随机数。
三、报表生成和图形显示功能
• Base SAS模块输出数据与读入数据时同样可以采用任何
•
格式。除了SAS过程产生的固定格式的报表外,用户可
根据自己的需要来设计报表的输出格式,包括输出文件
到磁盘上。
SAS的一些基本过程可绘制水平的或垂直的直方图、饼
图、块图等,还可以画散点图、曲线图、层次图、时间
序列图等。
§3
SAS的窗口环境
SAS窗口可分为两大类:基本窗口和其它
窗口。
一、基本窗口:包括PROGRAM
EDITOR窗口(程序编辑窗,缩写为
PGM)、LOG窗口(登录窗或日志窗)和
OUTPUT(输出窗)三个窗口。各窗口
的主要功能如下:
PGM
窗口
OUTPUT
LOG
窗口
•提交SAS语句;
•拷贝一个外部文
件到PGM输入和
编辑文本,包括
SAS语句;
•窗口,或拷贝窗
口内容到外部文
件上;
包含SAS日志,主要
内容有:
•在当前会话中发布的
SAS语句;
•注释、警告和出错信
息;
•DATA步应用的一些
结果。
窗口
包含由大多数SAS
过程产生的输出。
在SAS会话期间相
继产生的输出都
附加到OUTPUT
窗口内容中。
二、其它窗口:
除了三个基本窗口以外,显示管理包
含很多其它窗口。如资源管理器窗口和结果
窗口。各个窗口均可在任何一个窗口的命令
行键入相应的命令来打开。
第二章 SAS编程基础
同其它计算机语言一样,SAS语言也有它自己的语
句和句法:关键词和连结关键词与其它辅助信息的
规则。用户使用SAS语言来定义数据和规定对数据
怎样做统计分析。由SAS语句组成的序列称为SAS
程序。
§1 SAS语句
一 、SAS语句的定义
我们先来看一个实例:
某小学10名9岁男生3个项目智力测验得分资
料如下,试计算这10名男生各项目的平均得分。
某小学10名9岁男生3项智力测验得分
姓名
Zhang
Li
Wang
Zhao
Wu
Liu
Zhong
Yang
Zeng
He
常识
14
10
11
7
13
19
20
9
9
9
算术
13
14
12
7
12
14
16
10
8
9
填图
28
15
19
7
24
22
26
14
25
12
Data zhili;
input name $ x1 x2 x3;
cards;
Zhang
14
13
Li
10
14
Wang
11
12
Zhao
7
7
Wu
13
12
Liu
19
14
Zhong
20
16
Yang
9
10
Zeng
9
8
He
9
9
;
Proc means data=zhili;
var x1 x2 x3;
run;
28
15
19
7
24
22
26
14
25
12
在这个例子中,我们看到:
data, input, cards, proc, var,
run是关键词;
zhili是数据集名;
name, x1, x2, x3是变量名;
means是过程名;
data=是means语句中的选
项;
$是特殊字符。
现在,我们给出SAS语句的
定义:
SAS语句是由关键词、
SAS名、特殊字符或运算符组
成并以分号结尾的字符串。
二 、几个概念
1.SAS关键词
位于句首的用以说明语句类型和功能的单词称为SAS语
句的关键词。它是SAS语句的主要成份。
2.SAS名
SAS语句中出现的SAS名有很多种类,如变量名、SAS
数据集名、过程名等。
• SAS名最多可由1至8个字符(不能用汉字)组成;
• 第一个字符必须是字母或下划线,其余的字符可以是字母、
数字或下划线;
• SAS名中不能出现空格、特殊字符(如$、@、#等);
• SAS系统保留了一些名字作为特殊的变量名,这些变量名的
开头和结尾都用特殊字符下划线表示(如_N_、_ERROR_等)。
3.特殊字符和运算符
特殊字符包括:
• 圆括号( )、单引号‘ ‘、双引号“ “、美圆符号$、列指
针控制符@、行指针控制符#、冒号:、句号.、分号;等;
运算符包括:
• 加号+、减号—、乘号*、除号/、乘方**等;
• 等号=、不等号^=、小于号<、大于号>、小于等于号<=、
大于等于号>=等。
三 、语句格式
SAS语句的基本格式是:
KEYWORD Parameter … [item | item | item ]
options;
关键词
参数
选项1 选项2 选项3 选择值
• 关键词:用以说明语句类型和功能的单词;
• 参数:要求用户提供的信息。不用括号,不是任选项。例如:
input x y z;
•
•
其中:input 是关键词,它说明要把数据提供给哪些变量。
后面跟的变量名x、y、z 都是参数,即要求用户提供的信息。
…表示参数可以不止一个。
[选项1 | 选项2 | 选项3 ]中的竖线|用来分隔各选择项,表
示其中任选一个;方括号内的信息是可以选择的。
例如:proc means data=store maxdec=3;
其中:proc是语句的关键词,它说明本语句是过程语句;
means是过程名,它说明要调用的过程名称;data=、
maxdec=都是选项的关键词,等号后面是用户提供的信息。
§2 SAS程序
一系列SAS语句组成一段SAS程序。SAS程序中的语句可分
为两类:DATA步和PROC步。这两类步骤是所有SAS程序
的模块。通常用DATA步产生SAS数据集
而用PROC步对SAS数据集内的数据进行分析处理并输出结果。
一段SAS程序可由一个DATA步或一个PROC步组成;或者由
DATA步和PROC步两部分组成;也可由多个DTAT步和多个
PROC步组成。
一 、DATA STEP(数据步)
DATA步包括:创建一个或几个新的SAS数据集的语句和创建
数据集所必须的运算操作语句。每个DATA步以DATA语句开
头,可以包含任意多个SAS程序语句。一个DATA步的基本语
句有:
• DATA语句:表示创建SAS数据集,同时给数据集命名;
• INPUT语句:对SAS数据集中的变量进行描述;
• CARDS语句:用来指示数据行的开始;
• ;语句(空语句):表示数据行的结束。
例如:
Data zhili;
input name $ x1 x2 x3;
cards;
Zhang
14
13
28
Li
10
14
15
Wang
11
12
19
Zhao
7
7
7
Wu
13
12
24
Liu
19
14
22
Zhong
20
16
26
Yang
9
10
14
Zeng
9
8
25
He
9
9
12
;
二 、PROC STEP(过程步)
PROC步要求SAS系统从过程库中调出一个过程模块并
执行它。PROC步以PROC语句开始,可以包含多个相应的
SAS语句。
例如:
Proc means data=zhili;
var x1 x2 x3;
注意:一个完整的SAS程序必须以run语句结尾方能提
交运行。如:
Proc means data=zhili;
var x1 x2 x3;
Run;
§3 编写SAS程序
一 、SAS程序的例子
Data zhili;
input name $ x1 x2 x3;
cards;
Zhang
14
13
Li
10
14
Wang
11
12
Zhao
7
7
Wu
13
12
Liu
19
14
Zhong
20
16
Yang
9
10
Zeng
9
8
He
9
9
;
28
15
19
7
24
22
26
14
25
12
下面的PROC步要求SAS对刚创建的数据集按变量
name值的字母顺序排序;然后显示排序后的数据;
并对数据集中的所有数值变量计算均值等简单描述
性统计量。
Proc sort;
by name;
proc print;
title ‘9岁男生智力测验数据’;
proc means;
run;
以上一个DATA步和三个PROC步就构成了一个SAS
程序。
这个程序运行后的结果如下:
二、 SAS程序的书写方法
1. 书写格式
• SAS语句可以从一行上的任意位置开始;
• 几个SAS语句可以写在同一行上;
• 一个语句也可以写成几行,只要语句中的单词不被断开即可;
• 在一个语句中各项之间至少要有一个空格;
• 一些特殊符号(如等号=,加号+)可以占据空格的位置,如:
total=a+10; 与
total= a + 10 ;
是等价的;
• SAS语句用大写字母、小写字母或大、小写混合书写均可。
2. 注释(屏蔽符)
SAS语句中有一个注释语句,形式为:
/*注释内容*/
凡是空格可以出现的地方,以上形式的注释语句
也能出现。例如:
proc sort /*对数据集排序*/;
就是一个合法的语句。
需要注意的是,注释符/*…*/内的字符在程序运
行中不被执行。因此,注释符又称为屏蔽符。
3.变量的缩写
变量按它们第一次出现的次序被定义。例如前
面的例子的input语句中,name被定义为第一个变
量,接着是x1,x2,x3。
在一些SAS语句中,需要对变量进行集中处理,
SAS采用如下的方式来解决这个问题:
• 形如x1,x2,x3...xn的带序号的变量名,缩写为x1xn;
• 形如x1,a,b,x2,x3,d的不带序号的变量名,缩写为
x1--d;
• 特殊的SAS变量,_numeric_ 表示所有数值变量;
_character_ 表示所有字符变量;
_all_
表示所有变量。
请看上面数据集形式,这些变量在数据集中的位置是:
no x1 age x2 x3 x4 x5
下面以VAR语句为例说明SAS变量缩写引用中-与--区别:
VAR x1-x5;
VAR x1 x2 x3 x4 x5;
表示只引用变量x1 x2 x3 x4 x5。
VAR x1--x5;
VAR x1 age x2 x3 x4 x5;
表示引用在位置上从x1到x5之间的
所有变量x1 age x2 x3 x4 x5。
§4
SAS程序的执行与输出
一、 程序的执行
当我们在PGM窗口将程序输入完毕,检查修改
后就可以提交给SAS系统执行。在LOG窗口显示程
序执行中记录的信息,它包括:执行哪个语句;生
成的数据集中变量个数及观测个数是多少;每一步
花费的时间及出错信息等。
二、 SAS过程的输出
前例提交执行以后,DATA步产生一个名为
zhili的SAS数据集;后面的三个PROC步产生的结果
输出到OUTPUT窗口(例如前例的输出)。
§5
SAS表达式
表达式是由一系列运算符和运算对象形成的一
个指令集,它被执行后产生一个目标值。运算对象
是变量和常数;算符是特殊的运算符、函数和括号。
表达式分为简单表达式和复合表达式。下列式
子都是表达式。
X+1
3
LOG(X)
P/A*100
AGE<100
1-EXP(N/(N-1)) A=B=C
STATE=‘NC’
在DATA步中,为了对变量作变换,建立新变
量、条件处理、计算新数值及指定新数值,都需要
使用表达式编写程序语句。
一、SAS常数
SAS常数用来表示固定的值,它或者是
一个数字,或者是用引号引起来的字符串、
或者是其它特殊记号。
SAS使用的常数有五种类型:数值常数、
字符常数、日期、时间和时期时间常数、十
六进制数值常数、十六进制字符常数,我们
主要介绍数值常数和字符常数。
1.
数值常数:
一个数值常数就是出现在SAS语句里的数字。
很多数值常数完全像通常的数据值一样书写。数值
常数可以包括小数点,负号和E记号。例如:
1
-5
1.23
1.2E23
0.1
0.5E-10
用E表示法时,如2E4,它表示 2*104,或者
20000。
•
缺失值用小数点来(.)表示。
2.字符常数:
字符常数是由单引号括起来的1~200个
字符组成的.例如,在下面的语句中:
if name=‘TOM’ then do;
‘TOM’就是一个字符常数。
缺失的字符常数值用空格表示
3、日期时间常数
(1)日期型:
’01Jan2005’d
(2)时间型:
’12:30:21’t
(3)日期时间型:
’01Jan2005:12:30:21’dt
SAS系统以“0”代表1960年1月1日0时,其它日期在
SAS系统中存为与该日期相差的天数。
如:1960年1月3日在SAS系统中存为“2”
二、 SAS变量:
描述给定特征的数值集合的指标称为变量。
SAS数据集
SAS变量主要分为两类,数值变量和字符变量。
SAS变量名只能用英文字母表示
数值变量只能取数值为值。可以有正负号
及小数点(+、—、•),但不能有逗号(,),可
以接受的范围为±10E-307至±10E308。
字符变量可以取字符、字母、特殊字符
以及数字为值。在DATA步中某些SAS语句所使
用的变量名后跟一个美元符号,即表明该变量
是字符型变量。在SAS中一个字符变量的取值
可以有1—200个字符长。
三、 SAS算符
SAS算符是一些符号,它们要求作比较、算术运算或逻
辑运算。SAS使用两种主要类型的算符:前缀算符和中缀算
符。
前缀算符用于变量、常数、函数或者用括号括起来的
表达式。例如:
+Y
-25
-COS(A)
加号和减号可作为前缀算符;NOT和符号^也是前缀算符。
中缀算符作用在算符两边的运算对象上,例如6<8 。
中缀算符一般分为四类:算术算符、比较算符、逻辑算符和
其它算符(最大、最小和连接)。
1.算术算符:
算术算符表示执行一种算术运算,包括:
** 乘方
* 相乘
/ 相除
+ 相加
- 相
减
如果算术算符有一个运算对象是缺失值,运算
结果也是缺失值。
2.比较算符:
比较算符确定两个量之间的一种关系,如果这种
关系成立,则输出结果为1(真);如果它不成立,则
输出结果为0(假)。比较算符包括:
=(EQ) 等于
^=(NE) 不等于
>(GT) 大于
<(LT) 小于
>=(GE) 大于等于
<=(LE) 小于等于
考虑表达式:A<=B。如果A的值为4,
B的值为3,则表达式A<=B的值为
0(假);若A的值为5,B的值为9,则表
达式A<=B的值为1(真);若A与B的值
均为47,则表达式成立,且其值为1。
3.逻辑算符:
逻辑算符也称为布尔(Boolean)算符,在
表达式里通常用来连接一系列比较式。逻辑算
符包括:
&(AND) 与; | (OR) 或; ^ (NOT) 非
4.运算次序:
关于运算次序,SAS有如下的三个准则:
准则1:在括号里的表达式先计算;
准则2:较高优先级的运算先被执行。
下面是各运算符的优先等级(排在前面的优先):
• **、^(not)
• *、/
• +、-、
• <、<=、=、 ^=、>、>=、 ^>、^<
• &(and)
• |(or)
准则3:对于相同优先级的算符,左边的运算先做。但有
两个例外:
1) 对第一级,右边的先做;如6*3*2=6*(3*2)
2) 当两个比较算符围着一个量时,则等价于一个and运算。例
如:
12<age<20 等价于 ( 12<age) and (age<20)
§6 SAS函数
一 、SAS函数的定义
1.SAS函数的定义:
SAS函数是一个子程序,它由0个或几个自变量返回
一个结果值。每个SAS函数都有一个关键词名字。为了引用
函数,要写出它的名字,然后写出一个自变量或几个自变量,
它们用括号括起来,这个函数对这些自变量执行某种运算。
SAS函数的形式为:
functionname(argument,...)
•
•
•
例如:
INT(cash)
SUM(cash,credit)
MIN(SUM(cash,credit),1000)
2. SAS函数的分类:SAS函数分为17种类型,我们需
要接触的有:算术函数、截取函数、数学函数、概
率函数、分位数函数、样本统计函数、随机函数、
字符函数等。
二、 SAS函数自变量和结果
1. SAS函数的自变量
1) 自变量的类型:自变量可以是简单的变量名、常数
或者表达式。这个表达式还可以包含其它的函数。
例如:
sqrt(2500)
min(sum(of x1-x10),y)
2) 自变量的个数:
有些函数不需要自变量(如DATE()),
有些只需要一个自变量,
有些函数是对几个自变量作分析处理。
所有函数都不允许超过2000个自变量。
如果函数的自变量是表达式,则先计算作为自
变量的表达式。
如:LOG(x+y)
这个函数,是先计算x+y,然后调用对数函数
LOG来计算x+y的对数。
3) 自变量的表示法:一般地,当函数有几个自变量时,
它们必须用逗号分隔开。不过,以下三种写法均是
等价的:
functionname(OF variable1-variable...)
functionname(OF variable variable ...)
functionname(variable, variable, ...)
例如:
sum(of x1-x5)
sum(of x1 x2 x3 x4 x5)
sum(x1,x2,x3,x4,x5)
是等价的。
2. 函数的结果:
作为函数结果的目标变量(因变量),其
取值通常取决于自变量,当自变量是字符变量
时,因变量取字符为值;当自变量为数值变量
时,因变量取数值为值。 对大多数函数而言,
数值目标变量的长度是8个字节,字符目标变
量的长度为200个字节。
三.、函数的分类
SAS函数主要分为以下五类:
• 数学函数
abs():求绝对值
mod(var1,var2):求var1除以var2后的余数
sqrt():求平方根值
int():取整函数,截取小数部分
round(var,规定):按规定四舍五入。
规定取:0.1,.01,……
log():计算以e为底的对数值
log10():计算以10为底的对数值
 样本统计函数
max():求最大值
min():求最小值
mean():求平均数
std():求标准差
sum():求和
 随机函数
normal():产生一个正态分布的随机数
rannor():产生一个标准正态分布的随机数
 字符函数
substr():从一个字符串中抽取或取代一个指定的子串
trim():去掉字符串尾部的空格
 日期时间函数
year():从变量中抽取“年份”值
month():从变量中抽取“月份”值
day():返回变量的天数值
mdy(月,日,年):将变量转换成日期值形式
具体的函数请查阅:
SAS Online Help--->SAS Language--->SAS Functions
第三章 数据集的建立、浏览与修改
§1、数据集的结构与种类
一、结构:见PPT14
二、种类:
1、临时数据集
2、永久数据集
三、逻辑库(数据库)
1、什么是逻辑库
与通常的数据库不同,逻辑库是SAS的一个特有概
念。它本质上是一个比数据集高一级的目录,数据
集作为一个文件存储在这一目录之下。
2、逻辑库的种类
1)临时逻辑库:WORK(系统自动生成)
2)永久逻辑库:
(1)自动生成:SASUSER、SASHELP
(2)创建语句:LIBNAME 库名 ‘目录’;
注意:目录必须已经存在,SAS不能创建目录。
四、数据集的名称
1、临时数据集
WORK .数据集名或数据集名
如:Work . Zhili或Zhili
2、永久数据集
永久逻辑库名.数据集名
如:Sasuser . Zhili
§2 数据集的创建
一、直接创建
1、用DATA步
用INPUT和CARDS语句直接输入
例3.1: Data Test;
Input Name $ Chinese English Math;
Cards;
Cheng 85 98 86
Zhang 95 88 91
Li
88 92 83
;
Run;
该程序等价于:
Data Test;
Input name $ Chinese English Math
@@;
Cards;
Cheng 85 98 86 Zhang 95 88 91
Li 88 92 83
;
Run;
注意:如果数据块中含有分号,应该用Cards4语句,
并且用四个分号表示数据块的结束。
例3.2:
Data Test;
Input Name $ Chinese English Math;
Cards4;
Cheng; 85 98 86
Zhang; 95 88 91
Li;
88 92 83
;;;;
Run;
2、用Viewtable
3、用Assist模块
(1)定义变量:
变量类型:字符型填$,数值型填n;
格式:字符,如$8.;数值,如8.2。定义完后保存或关闭窗口单击
保存
(2)定义字符型变量的长度:
字符型变量的默认长度为8位。如超过8位,则用length语句
例3.3:Data Case;
length y $ 20;/*length语句应在input语句之前*/
input x y $ @@;
cards;
25 586966832556
;
run;
(3)输入数据:每输入完一条记录后,按工具栏中的添加按钮,
输入下一条记录。。。
4、用Insight模块
命令: Insight
菜单:Solution—Analysis—Interactive
先输入数据,再定义变量
变量定义方法:双击默认变量名或单击最左上角的三角形图标,
点定义变量。
注意:每输入一个数据都要回车
二、用INFILE语句直接读入外部文本数据
例3.4:Data Test;
Infile ‘文本文件地址’;
Input Name $ Chinese English Math;
Run;
注意:文本文件中只能含观测,不能含变量名;文件名要含
扩展名
三、间接导入创建
File Import Data
SAS读入数据的格式
1、自由格式
见上例
2、列格式:指明每个变量读取数据的起始位置
例3.5:Data Birthday;
Input name $ 1-4 year 12-15 month 16-17 day
18-19;
Cards;
Liu 335223197802050015
Chen 523632198206250011
Li
225366197610020008
;
Run;
注意:数据块应从程序编辑窗口的最左端开始输入,一个空
格占一个字节
3、其它格式
例3.6:data sj;input a $ 5. b 3.1;
cards;
www333
www3333
www33333
;run;
“3.1”表示b共占3个字节,其中有一位小数;“5.”
表示字符变量a占5个字节,5后面的小数点不能省略,
输出数据集中的小数点不占字节。
注意:数据块要从最左端开始输入
4.Format语句:将混乱的数据转化为统一的格式
语句格式:format+变量名+数据格式(8.x)
例:3.7:
data sjgs;
input a @@;
format a 8.2;
cards;
2.335 6.3 12
53.1552
;
run;
proc print;
run;
注意:若数据块中有中文,且中文中有空格,则有两种处理方式:(1)在
input语句中相应的变量要定义占用几个字节,且数据块要从最左边开
始输入,这种处理将全部保留中文中的空格;(2)删除中文中的空格。
§3 数据集的浏览与修改
Viewtable、Insight法
1、增加观测(行)用Viewtable(先进行编辑模
式)、Insight均可
2、增加新变量(列)用Insight中的“新变量”,删
除已有变量(列)用Insight:选中要删除的列/编
辑/删除或用Viewtable:隐藏/另存为.
3、行列的移动用Insight:编辑/窗口/工具/手。注
意:按的时间长一点。
修改每个数据后须回车确认
第四章 基于SAS语言的数据管理
一、数据集的复制
利用SET语句
例4.1:Data Test1;
Set Test;
run;
二、从某数据集中取子集
1、从某数据集中选择所需的部分观测(记录)
建立一子数据集
利用where语句或if语句
例:从临时数据集TEST中选取Chinese成绩大于
90的记录作为新数据集
例4.2:Data Test1;
Set Test;
Where chinese>90;
Run;
或
Data Test1;
Set Test;
If chinese>90;
Run;
Where语句与if语句的主要区别
where语句在观测读入数据集之前起作用,而
if语句在记录读入数据集之后起作用(参见例
4.6)
2、从某数据集中选择部分变量建立一子数据集
利用Keep语句或Drop语句
例4.3:Data Test2;
Set Test;
Keep Chinese English;
Run;
或
Data Test2;
Set Test;
Drop name Math;
Run;
三、数据集的合并
(一)规则数据集的合并
1、纵向合并:利用Set语句
例4.4:Data Score;
Input name $ Chinese English Math @@;
Cards;
Liu 80 85 83 Wang 91 87 95 Mao 81 86 92
;
Run;
现将数据集Test和Score纵向合并成一新数据集
Data Testscore;
Set Test Score;
Run;
2、横向合并
利用Merge语句
例4.5:Data Test3;
Set Test;
Keep Math;
Run;
现将数据集Test2和Test3横向合并
Data Test23;
Merge Test2 Test3;
Run;
(二)不规则数据集的合并
例4.6:data a;
data b;
input x y @@;
input x z @@;
cards;
cards;
1 15 3 78 5 90
1 69 2 89 4 98
;
;
run;
run;
Data ab;
Set a b;
Run;
Data ba;
Merge a b;
Run;
data whereab;
merge a b;
where x>2;
run;
data ifab;
merge a b;
if x>2;
run;
先where,后merge
先merge,后if
注意:对于共同变量,合并后取最后数据集该变
量的值
Whereab:
ifab;
x y
z
x
y
z
1 4 78 98
1 4
90 98
2 5 90
四、数据步中的几个常用语句
1、Rename语句
例4.7:data test4;
set test;
rename math(旧名)=mathematics
(新名);
run;
2、赋值语句
一般格式:variable = expression;
赋值语句将表达式计算的结果赋给变量 (variable)
例4.8:data test5;
set test;
total=chinese+english+math;
run;
3、Output语句和Delete语句
(1)OUTPUT语句
该语句告诉SAS系统输出当前的观测到指定的SAS数据集中。
其一般格式是:output <数据集名1> … <数据集名N>;
SAS系统把当前这个观测强行输出到output语句规定的所有
数据集上,并返回到DATA步开始接着处理下一个观测。这
里数据集名可以多于一个,但必须在DATA语句中已被命名。
例4.9:
data class;
input name $ chinese maths english @@;
score=chinese;output;
score=maths;output;
score=english;output;
Cards;
a 82 78 69 b 90 78 89 c 79 86 98
;
run;
如无output语句数据集class会是什么?
(2)DELETE语句
DELETE语句告诉SAS系统停止处理当前的观测,即当
前的这个观测不被输出到正创建的SAS数据集中,而
且返回到DATA步的开始处理其它观测。
其一般格式是:DELETE;
例4.10: data class1 ;
input sex $ chinese maths english @@;
if sex='m' then delete;
cards;
m 82 78 69 f 90 78 89 m 79 86 98
;
run;
五、Data步中的控制语句
(一)IF语句(条件语句)
在DATA步中,SAS系统对每个观测是按照每个语句出现的先后
顺序依次执行的。有时当你想改变语句的运行顺序或对某些
确定的观测跳过一些语句,就需要使用DATA步中的控制语句。
在SAS系统中有两种形式的IF语句:条件IF语句和子集IF语句。
子集IF语句不包含THEN子句,它仅对满足IF条件的那些观测
进行处理。
1.条件IF语句
条件IF语句含有一个THEN子句,用来执行满足IF条件的那些
观测。如果某个观测不满足IF条件,则THEN子句不被执行,
此时可以使用ELSE语句来执行有关的运算。如果没有规定
ELSE语句,则SAS系统执行紧跟在IF后面的下一个语句。
其一般格式是:IF condition THEN statement ;
<ELSE statement ;>
例4.11:
data class2;
input sex $ chinese maths english @@;
total=chinese+maths+english;
if sex=‘m’ then
if total>=240 then output;
else put ‘total<240’;
else output;
/*注:PUT语句表示将其后的内容
输出到日志窗口*/
Cards;
m 82 78 69 f 90 78 89 m 79 86 98 m 76 56 80
f 72 76 81 f 69 78 91 m 92 71 85
;run;
语句解释:由DATA步创建的SAS数据集class中有一个嵌套IF
语句。第一个IF语句首先判断性别是否为男性,若是男性则
进行第二个条件,判断该同学总分是否在240分以上。如果
在240分以上,则该观测读入到正创建的SAS数据集中;如
果总分在240以下,则该观测不被读入到正创建的SAS数据
集中,只是在LOG窗口中记上该男生总分在240分以下。当
第一个观测为女性,即第一个条件不成立时,直接进入else
语句,输出该观测,并在LOG窗口记上该生为女性
OBS
SEX
CHINESE
MATHS
ENGLISH
TOTAL
1
2
3
4
5
f
m
f
f
m
90
79
72
69
92
78
86
76
78
71
89
98
81
91
85
257
263
229
238
248
2.子集IF语句
子集IF语句不包含THEN子句,它仅对满足IF条件的
那些观测进行处理。
其一般格式是:IF expression;
见例4.6
(二)Select…When语句
此语句有两种格式:
格式1:
Select (表达式)
When (数值1)执行语句A;
When (数值2)执行语句B;
…
Otherwise 执行语句Z;
End;
格式2:
Select;
When (条件1) 执行语句A;
When (条件2) 执行语句B;
…
Otherwise 执行语句Z;
End;
例:见课堂练习第14题
(三)Do语句(循环语句)
常见DO语句有以下形式:简单DO语句、循环DO
语句、DO WHILE语句、DO UNTIL语句
1.简单DO语句
简单DO语句常常用在IF-THEN-ELSE语句里,用
来执行当IF条件成立时的一组语句(多于一个
时) ,在IF条件不成立时,跳出这组语句去
执行其它SAS语句。
例4.12:data class3;
input sex $ chinese maths english @@;
if sex=‘m’ then /*then后面的分号可有可无*/
Do;
total=chinese+maths+english;
n+1;
/*其中 n+1为累加语句,其初始值系统
自动赋值为零*/
End;
ave=sum(chinese,maths,english)/3;
Cards;
m 82 78 69 f 90 78 89 m 79 86 98 m 76 56 80
f 72 76 81 f 69 78 91 m 92 71 85
;
Run;
语句说明:上述这段程序SAS系统首先创建了一个包含性别在
内的名为CLASS的SAS数据集。该数据集首先判断性别是否
为男性,若是男性,再执行此中的DO组;若是女性,则直接
执行IF后的赋值语句:
ave=sum(chinese+maths+english)/3。由于女性同学
没有执行IF条件中的DO组,所以女性同学的总分为缺省,同
时累加语句也没有执行,从而N值不变。输出结果如下:
OBS
SEX
1
2
3
4
5
6
7
m
f
m
m
f
f
m
CHINESE
MATHS
ENGLISH
82
90
79
76
72
69
92
78
78
86
56
76
78
71
69
89
98
80
81
91
85
TOTAL
229
.
263
212
.
.
248
N
1
1
2
3
3
3
4
AVE
76.3333
85.6667
87.6667
70.6667
76.3333
79.3333
82.6667
2、循环DO语句
循环DO语句是指DO—END之间的语句被重复执行的语句,其一般格
式为:
DO index-variable =spacification-1<,...spacification-n>;
其它sas语句;
End;
关于循环DO语句一般格式的几点说明:
(1)index-variable:控制变量,它的值控制着执行情况及执行次
数。
(2)spacification:说明项,说明变量的起止值,规定变量的增
加值。其一般格式为:
start <to stop><BY increment>
start是循环控制变量的起始值,当同to stop或BY increment一
起使用时,必须是数值或产生数值的表达式。循环DO语句从
start开始执行,其值在第一次循环之前被计算。当没有使用to
stop或BY increment时,start可以是数值常数或字符常数
to stop:循环控制变量的终止值,它可以是数值或产生数值的
表达式,它的值在每次循环执行前被计算。当start和stop一
起使用时,循环地执行DO组中的语句直到循环控制变量的值
大于stop的值为止。
BY increment:规定循环控制变量每循环一次后的增加量,它
一般与start、to stop一起使用。如没有此增量,则控制变
量的值每次仅增加1。很显然,如果增量大于0,则start是该
循环的下界,而stop则是该循环的上界。如果增量小于0,则
start是该循环的上界,而stop则是该循环的下界。
例4.13 利用循环语句和随机正态函数产生自由度为5的卡方
随机数50个
解:根据题目要求,程序如下:
data a(drop=i j z);
do i=1 to 50
by 1; y=0;
do j=1 to 5;
z=normal(0);
y=y+z*z;
end;
output;
end;
proc print noobs;run;
2
3、DO
WHILE语句
该语句规定当WHILE后的表达式运行的结果为真时,重复地执
行DO组中的语句。
其一般格式为:
DO WHILE(expression);
这里的表达式(expression)与前面遇到的表达式是一样
的,值得注意的是:其值是在每次循环开始前被计算。
4、DO
UNTIL语句
该语句规定直到UNTIL后的表达式运行的结果为真时,循环结
束。
其一般格式为:
DO UNTIL(expression);
这里的表达式(expression)与DO WHILE语句中的表达
式是一样的,值得注意的是:其值是在每次循环结束后被计
算,亦即DO组中的语句至少被执行一次。
例4.14
data class4;
input sex $ chinese maths english @@;
do i=1 to 10 by 2 while (n lt 2);
total=chinese+maths+english;
n+1;
end;
ave=sum(chinese,maths,english)/3;
cards;
m 82 78 69 f 90 78 89 m 79 86 98 m 76 56 80
f 72 76 81 f 69 78 91 m 92 71 85
;proc print;run;
语句解释:这段程序利用DATA步创建了一个包括循环语句、
赋值语句和累加语句在内的名为CLASS的SAS数据集。其中循
环变量的起始值为1,终止值为10,步长增量为2,并满足累
加变量n小于2,从而当程序读入第一个观测执行到该循环语
句i=1时,SAS系统首先对n和2进行比较。由于n开始为0(系
统默认),小于2,所以系统执行该循环语句。经循环一次
后,i增加2为3,累加变量n也加1变为1,此时n与2比较仍小
于2,所以继续执行一次循环语句,之后i变为5,而n也增加
到2,此时n与2再进行比较条件已不成立,退出循环,转而
执行赋值语句:ave=sum(chinese,maths,english)/3。当系
统执行完第一个观测重新读入第二个观测时,由于n等于2没
变,所以直接跳过循环语句,执行此后的赋值语句
输出结果如下:
OBS SEX CHINESE MATHS ENGLISH I N TOTAL AVE
1
m
82
78
69
5 2 229 76.3333
2
f
90
78
89
1 2
.
85.6667
3
m
79
86
98
1 2
.
87.6667
4
m
76
56
80
1 2
.
70.6667
5
f
72
76
81
1 2
.
76.3333
6
f
69
78
91
1 2
.
79.3333
7
m
92
71
85
1 2
.
82.6667
五、Data步中的数组语句
在数据处理过程中,常常会遇到像向量或矩阵这样的组合型数
据。这类组合型数据往往具有同一属性,或者是数值型的,或
者是字符型的。对于这样一类具有同一属性的数据或变量,
SAS系统提供了具有这类数据变量特点的数组语句—ARRAY语句,
用以定义一组变量为某个数组的元素。此后,当DATA步中的
其它SAS语句需要使用这组变量的某个变量时,SAS系统可以
使用这个数组的元素代替这个变量。
1、一维数组语句
Array 数组名 {数组中变量的个数} 数组中所有变量名
注:括号可以是大、中、小括号
如:array economic{4}cost price profit income
则 cost=economic(1)
price=economic(2)
带初始值的数组语句
Array 数组名 {变量个数} 数组所有变量名 (变量初始值)
如:array economic{4}cost price profit income (12 18 81 98)
2、二维数组语句
Array 数组名 {行数,列数} 数组所有变量名
如: array score{40,7} x1-x280;
该语句定义了一个名为score二维数组、变量名分别为X1,
X2,…,X280共280个变量。该二维数组是按顺序从左上角到
右下角逐行读入,用矩阵可表示为:
 X1

 X8


 X 282
X2
X9
X 283
X7 

X 14 


X 280 
则X1=score{1,1}, X2=score{1,2}, 等等
3、数组的应用:
例4.15 现有我国城镇居民1997、1998、1999年共3年的家
庭消费资料,利用数组语句求每年8个变量的和。
年份
X1
X2
X3
X4
X5
X6
1997
1942.59
520.91
395.48
245.59
232.90
448.38 358.64 185.65
1998
1926.89
480.86
201.27
205.16
257.15
499.39 408.39 156.71
1999
2959.00
730.8
749.4
513
467.87
1142
X7
478
X8
457.6
data consumer(drop=i);
input year x1-x8;
array consum{8} x1-x8;
do i=1 to 8;
if consum(i)=. then consum(i)=0;
sum+consum(i);
end;
cards;
1997 1942.59 520.91 395.48
. 232.90 448.38 358.64 185.65
1998 1926.89 480.86 201.27 205.16 257.15 499.39 408.39 156.71
1999 2959.00 730.80 749.40 513.00 467.87 1142.0 478.00 457.60
;proc print noobs;run;
注:SUM为三年的消费汇总数
第五章 几个常用SAS过程与SAS语句
一、打印(输出)过程:PROC PRINT
1、PRINT过程的主要功能
该过程用于输出SAS数据集中的数值。数据集中每个变量形成
输出报表的列,每个观测形成行。
例如: Proc print data=sasuser.class;run;
PRINT过程的主要功能有:
(1)变量的输出格式用户可以选择;
(2)可在输出报表中加上标题和脚注;
(3)每页报表的宽度和长度可以控制,每列的宽度也可以控制;
(4)可输出数据集中变量的任何子集;
(5)可分组输出观测数据;
(6)可计算所有观测值或分组观测值的总和及其他统计量。
2.PRINT打印过程的一般格式
PROC PRINT <option-list>;
语句说明:
⑴ PROC PRINT语句:PROC PRINT <option-list>;
该语句是PRINT过程唯一所需的。在该语句中使用的选项有下列几项:
①DATA=SAS-data-set(SAS数据集)——指定所要打印的数据集。如省略,
则用最新生成的SAS数据集。
②N——要求在输出这个数据集的数据列表之后同时输出观测的个数。
如果使用BY语句,在每个BY组的数据输出之后同时输出该BY组的观测个数。
③DOUBLE|D——要求输出时隔行打印。
④ROUND|R——按FORMAT语句对变量规定的输出格式的小数位进行四舍
五入,如没有规定输出格式,则保留二位小数。只有求总和的变量值被
四舍五入,数值在输出前已被四舍五入,然后对舍入值累计求和输出。
⑤NOOBS——不输出观测数据的序号。
(2)此过程可选语句
VAR variables-list;
BY variable-list;
PAGEBY BY- variable;
SUMBY BY-variable;
SUM variable- list;
①VAR语句(为各过程的通用语句):VAR+变量名;
该语句规定过程需要处理的变量。
如:proc print data=sasuser.class;
var x;
② BY语句:BY 变量名;
该语句既可以用于DATA步又可以用于PROC步,具体含义各不相
同。
该语句与PROC PRINT语句一起使用时可分别输出由BY变量定义
的几个观测组的数据列表。
③ PAGEBY语句:PAGEBY 变量名;
该语句使得PRINT过程开始在新的一页上输出。当PAGEBY变
量的值改变或在BY语句中列在PAGEBY变量前面的BY变量值改
变时,PRINT过程都将从新的一页开始输出。
例5.1:
data sample1;
input x y z @@;
Cards;
1 1 1 1 2 3 1 7 8 9 5 4 3 4 2
4 5 5 6 6 7 1 4 3 5 6 2
;run;
proc sort;by x;run;
proc print; by x;pageby x; run;
注:(1)当需要分组输出时,在print过程前必须使用排序过
程(sort过程),并且print过程中的 by 变量名和pageby变
量名与sort过程中的by 变量名必须一致。
(2)上例中,当没有语句“pageby x;”时,数据一组接着
一组输出。当含有该语句时,数据按组分页输出,即一组一
页,有几组就输出几页。
④ SUM语句:SUM + 变量名(可多个);
该语句用来计算变量的总和。当使用BY语句并规定一个BY变量时,过程将
对包含不只一个观测的每个BY组的SUM变量求和。
例5.2:
data sample2;
input x y z @@;
cards;
1 1 1 1 2 3 1 7 8 9 5 4 3 4 2
4 5 5 6 6 7 1 4 3 5 6 2
; proc sort;by x;run;
proc print;
by x;sum y z; run;
过程解释:sort过程首先按变量x从小到大排序,print过程先对变量y z分
组求和,最后再给出总和。
注:(1)在按BY变量分组求和之前,须按BY变量进行排序。
(2)上述程序段中,若把sum y z改为sumby x,结果是一样的。
二、排序过程:PROC SORT
1.SORT过程的主要功能
SORT过程在SAS数据集中按一个或几个变量的大小顺序将观测重新分类排序,
并把结果存放在新的SAS数据集里,或者用新的数据集替代原始数据集,
以便其它SAS过程通过BY语句来直接调用它。例如,上例中经过事先对变
量X进行排序之后就可以按变量X分组对变量Y进行汇总打印了。
2.SORT排序过程的一般格式
PROC SORT <option-list>;BY <descending>variable-1
<…<descending>variable-n>;
语句说明:
(1)PROC SORT 语句后的选择项规定排序的数据集名或输出的数据集名。
若该语句后跟DATA=SAS-data-set选项,则规定对该数据集进行排序;没
有该选项,则规定对最新创建的SAS数据集进行排序。若该语句后跟
OUT=SAS-data-set选项,则规定输出数据集名,否则,先对给定的数据
集进行排序,并用排序后的数据集代替原始数据集,但数据集名不变。
(2)BY语句规定排序的变量名,可以有任意多个。当在BY语句
中规定了多个变量时,SORT过程首先按BY语句中第一个变量
的顺序进行排序,然后对第一个变量的给定值按第二个变量
的顺序进行排序,这样一直下去,直到所有变量被排序为止。
若BY语句中给定了关键词descending,则表示SORT过程按给
定变量的下降顺序排序,否则按升序排序。
例5.3: 对如下数据集CLASS的数据,先按性别排序,再按年龄
降序排列。
Name
Sex
Age
Height
Weight
Alice
F
13
56.5
84
Becka
M
13
65.3
98
Gail
M
14
64.3
90
Karen
F
12
56.3
77
Data sasuser.class;
Input name $ sex $ age height weight;
Cards;
Alice f 13 56 45
Beka m 12 61 50
Gail
m 14 65 53
Karen f 11 42 41
;run;
data paixu;
set sasuser.class;
run;
proc sort out=paixu1;
by sex descending age;
run;
proc print data=paixu1;
title '按性别和年龄排序';
run;
该例中,首先由set语句把 sasuser数据库中的名为class的数
据集调入到当前状态形成数据集paixu。Sort过程先按SEX升序
排列,再对性别中的女性和男性分别按年龄进行降序排列,其
结果形成数据集paixu1。Print过程打印输出数据集paixu1,
title语句给出了输出结果的标题。程序运行结果如下:
按性别和年龄排序
OBS
NAME
SEX
AGE
HEIGHT
WEIGHT
1
Alice
F
13
56.5
84
2
Karen
F
12
56.3
77
3
Gail
M
14
64.3
90
4
Becka
M
13
65.3
98
三、转置过程:PROC TRANSPOSE
1.TRANSPOSE过程的主要功能
TRANSPOSE过程把原SAS数据集转置为一个新的SAS数据集。在新
的SAS数据集中,原数据集中的观测变为变量,变量变为观测。
新数据集中的变量包含以下三类:
(1)从输入数据集中拷贝过来的变量。这些变量与输入数据集
中的变量具有相同的名字和值;
(2)由输入数据集中的观测转置后所创建的变量;
(3)为了识别在输出数据集的每个观测值的来源而由该过程创
建的变量。
如对例5.3的数据集paixu1进行转置,程序如下:
data trans;set paixu1;run;
proc transpose ;
id name;
run;
proc print ;run;
数据集paixu1转置后结果如下:
OBS
_NAME_
ALICE
KAREN
GAIL
BECKA
1
AGE
13.0
12.0
14.0
13.0
2
HEIGHT
56.5
56.3
64.3
65.3
3
WEIGHT
84.0
77.0
90.0
98.0
从输出结果看出,转置后的数据集含有三类变量。其中AGE、
HEIGHT、WEIGHT是从输入数据集中拷贝过来的变量,_NAME_是
输入数据集中的观测转置后所创建的变量,称为转置变量,而
变量ALICE、KAREN、GAIL、BECKA则是为了识别在输出数据集
的每个观测值的来源而由TRANSPOSE过程创建的变量。
2.TRANSPOSE过程的一般格式
PROC TRANSPOSE <option-list >;
语句说明:
(1)PROC TRANSPOSE 语句规定对给定的SAS数据集进行转置。
该语句后的选择项option-list规定转置的数据集名或转置
后输出的数据集名或对输出变量进行命名。若该语句后跟
DATA=SAS-data-set选项,则规定对该数据集进行转置;没
有该选项,则规定对最新创建的SAS数据集进行转置。若该
语句后跟OUT=SAS-data-set选项,则规定输出数据集名,否
则,SAS系统按规定自动地给输出数据集命名为DATAn。
(2)该过程可选语句:
VAR 变量名;
ID 变量名;
COPY 变量名;
BY 变量名;
① VAR语句列出要转置的变量,包括数值变量和字符变量。如果没有使用
VAR,输入数据集中没有列在其它语句里的所有数值变量被转置。字符变
量若要转置必须在VAR语句中列出。没有被转置的变量从新数据集中删去,
除非它们在COPY或BY语句中列出。
② ID语句规定输入数据集中的一个变量为输出数据集中观测的识别变量,
要求ID变量值必须是唯一的。当使用BY语句时,每一BY组中的ID变量值
也必须是唯一的。
③ COPY语句中列出的所有变量不被转置而直接从输入数据集中拷贝到输出
数据集中
④ BY语句规定每个BY组中的变量进行转置,但BY变量本身并不参加转置。
例5.4:
data student;
input name $ sex $ chi eng;
cards;
li
f 85 96
wang m 88 89
wu
f 90 95
;
run;
proc transpose out=trans;
var sex chi eng;
id name;
run;
问(1)如没有id语句会怎样?(2)如没有var语句
会怎样?
例5.5:以下数据来自世界上一些著名公司某年经营情况资料,包括公司名
称、国别、经营商品种类、雇员人数、销售额、利润,具体情况如下:
公司名称
国别
经营商品种类 雇员人数 销售额
利润
(千人) (百万)
(百万)
Thomson
France Electronics
100
$11,917
2441
Farmland
U.S.
Food
11
$4,723
3255
Chrysler
U.S.
Automobiles
128
$43,600
2551
Volkswagen
Germany Automobiles
252
$46,312
1232
Nissan Motor Japan
Automobiles
143
$53,760
805
Borden
U.S.
Food
39
$6,700
6310
Mazda Motor Japan
Automobiles
33
$20,279
4541
Westinghouse U.S.
Electronics
102
$11,564
3260
Amerada Hess U.S.
Oil
10
$5,852
2680
Peugeot
France Automobiles
144
$25,670
258
试根据以上数据排列的顺序,创建一个包含公司名称、国别、经营商品种类、
雇员人数、销售额、利润作为变量名的数据集A,然后按利润从大到小排
序,
最后对数据集A进行转置,识别变量为公司名称。
根据题意,程序如下:
data A;
input name$20. state$ goods$ employ sale profit;
cards;
Thomson
France
Electronics 100
Farmland
U.S.
Food
11
Chrysler
U.S.
Automobiles 128
Volkswagen
Germany
Automobiles 252
Nissan Motor Japan
Automobiles 143
Borden
U.S.
Food
39
Mazda Motor Japan
Automobiles 33
Westinghouse
U.S.
Electronics
102
Amerada Hess U.S.
Oil
10
Peugeot
France
Automobiles 144
;
run;
proc sort out=sortA;by descending profit;run;
proc transpose data=A out=A1;
var state goods employ sale profit;
id name;
run;
11917
4723
43600
46312
53760
6700
20279
11564
5852
25670
2441
3255
2551
1232
805
6310
4541
3260
2680
258
第六章 描述统计的SAS实现
第一节、变量的数字特征与MEANS过程
一、变量特征与统计描述
(一)总体随机变量的数字特征及其意义
常用的随机变量数字特征有以下三类:
1.表示集中趋势的数字特征
(1)总体均值(Mean)—常用字母μ表示,用公式表示为:
  E ( x)
,它表示随机变量的中心位置,即平均水平,有时均值也称为
集中趋势。
(2)中位数(Median)—总体中位数是随机变量取值的中间值,
其上和其下各有一半。
(3)众数(Mode)—众数是使得随机变量密度函数取最大值
的数值。常用在离散随机变量情况下。
2.表示离散程度的数字特征
(1)极差(Range)—极差是随机变量的最大值和最小值之差,
R  X max  X min
用公式表示为:
显然,极差越大,随机变量的分布越分散。
(2)方差(Variance)—表示偏离均值的程度,有时也称为离
中趋势,常用字母表示,用公式表示为:  2  E( X   )2
由方差的定义可以看出,方差越大,随机变量偏离中心就越大,
方差越小,则分布越集中。特别地,当方差为0时,随机变
量的分布几乎集中到一个点上。
(3)标准差(Standard Variance)—它是方差的平方根,常
用字母表示,它的意义与方差相同。
(4)标准差系数(Coefficient of Variance)—它被定义为标
准差与均值的比率,常用字母CV.表示,用公式表示为:

C.V=

标准差系数反映了单位均值上的离散程度,常用在两个总体均
值不等的离散程度的比较上。若两个总体的均值相等,则比
较标准差系数与比较标准差是等价的。
3.表示分布形状的数字特征
(1)偏度(Skewness)—用于度量总体分布状况偏斜程度
的数字特征,常用字母表示,用公式表示为:
E ( X   )3
G1 
3
当=0时,随机变量的分布为对称分布;当>0时,随机变量的分
布为非对称的右偏分布,此时随机变量在均值的右边值要多
于左边,或者说随机变量的值在右边更为分散;当<0时,随
机变量的分布为非对称的左偏分布,此时随机变量在均值的
左边值要多于右边,或者说随机变量的值在左边更为分散。
由于正态分布是对称分布,正态分布随机变量的偏度为0。
(2)峰度(Kurtosis)—用于度量总体分布尾部“粗细”状况
的数字特征,这里的“粗细”是与正态分布的尾部而言的,
常用字母表示,用公式表示为:
G2 
E ( X   )4

4
3
利用上述公式,很容易计算出正态分布随机变量的峰度为0。由
此我们得到,当>0时,与正态分布相比,随机变量X偏离均
值的极端值较多,此时分布有一个沉重的尾部,也称重尾或
粗尾,分布形状比较平坦;当<0时,与正态分布相比,随机
变量X偏离均值的极端值较少,分布形状比较陡峭、尖削。
(二)样本统计量的数字特征
实际应用过程中,由于随机变量的分布是未知的,所以随
机变量的数字特征往往也是未知的,这些总体数字特征常称
为总体参数。为了估计总体参数,常从总体中随机地抽出部
分个体进行观测以从数量上来推断或估计总体参数。称从总
体中随机抽出的部分个体的观测为样本,一个样本是来自总
体X的一组独立同X分布的随机变量。称样本的函数为样本
统计量,常作为总体参数的矩估计。一次抽样所得到的观测
值称为样本观测值,常用表示。常见的样本统计量有:
1.表示位置的样本统计量
(1)样本均值,常记为,定义为,常作为总体均值μ的估计。
(2)中位数,常记为。设来自容量为的样本观测值经排序后为:
则样本中位数为:
 x n 1 ,当n为奇数时
 ( 2 )
me   1
 ( x n  x n ),当n为偶数时
 2 ( 2 ) ( 2 1)
p
Q
13
(3)百分位数(Percentile),它是中位数的推广。当把来自样本
的观测值按从小到大顺序排列后,位于第%位置的数值称为第百
分位数。显然,中位数为第50百分位数,最小值为第0百分位数,
而最大值为第100百分位数。常用第25%分位数,也称为下四分位
数,用表示,第75%分位数,也称为上四分位数,用表示。
2.表示离散程度的样本统计量
1
s 
(1)样本方差,定义 n  1  ( x  x )
,常作为总体方差的
1
估计。(2)样本标准差,定义
,常作为总
s
 (x  x )
n 1
体标准差的估计。
Qr  Q3  Q1
(3)四分位差,定义为
。
s
C

(4)样本变异系数,定义为
×100%,作为总体标准
v
x
差系数CV.的估计。
s
(5)样本均值标准误差,也称为样本标准误, sx 
,常作为
n
样本均值分布的标准差的估计。
3.表示分布形状的样本统计量
( xi  x )3
n

G1
(1)样本偏度, g1  (n 1)(n  2)
s3 ,作为总体偏度 的估计。
4
(
x

x
)
n
(
n

1)
3(n  1)2 ,作为

i
(2)样本峰度,
g 

2
2
i
2
i
2
总体峰度
G2的估计。
(n  1)(n  2)(n  3)
s4
(n  2)(n  3)
总体均值和方差给出它们的区间估计。
设 x1 , x2 ,
, xn 是来自正态总体 N (, 2 ) 的一个随机样本观
测值,则总体均值μ的置信度为1-
( x  
2
0
n
, x  
2
0
n
)
 的置信区间为:
当已知 
s
s
( x  t (n  1)
, x  t (n  1)
)
n
n
2
2
当
0 时

未知时
例6.1:为了了解某地区居民家庭收入状况,现从这一地区家
庭中随机抽查了100户居民,调查其家庭人均收入,调查结
果如下(单位:百元):
271 396 287 399 466 269 295 330 425 324 228 113 226
176 320 230 404 487 127 74 234 523 164 336 343 330
436 141 388 293 464 200 392 265 403 259 426 262 221
355 324 374 347 261 287 113 135 291 176 342 443 239
302 483 231 292 373 346 293 236 223 371 287 400 314
468 337 308 359 352 273 267 277 184 286 214 351 270
330 238 248 419 330 319 440 427 314 414 299 265 318
415 372 238 323 412 493 286 313 412
试根据以上数据计算:
(1) 这100户家庭的平均人均收入,并据此推断该地区人均收
入水平;
(2) 这100户家庭的人均收入的离散程度;
(3)这100户家庭人均收入的分布形状:偏度和峰度。
二、MEANS过程(均值过程)
假设已存在的SAS数据集含有n个观测,m个变量。
MEANS过程用来对数据集中的数值变量的全部非丢失的观
测计算简单描述统计量,此外MEANS过程还可以对均值进
行假设检验并能给出置信区间。如果使用BY语句,可把数
据按BY变量分为几个观测组,并对每个观测组分别计算简
单描述统计量。另外,MEANS过程还可以有选择地建立一
个或几个包含若干统计量的输出SAS数据集,以便进一步分
析计算时调用。
(一)MEANS过程的一般格式
MEANS过程的一般格式如下:
PROC MEANS <option-list><statistic-keyword-list>;
VAR variable-list;
CLASS variable-list;
FREQ variable;
WEIGHT variable;
ID variable-list;
BY variable-list;
OUTPUT <OUT=SAS-data-set><output-statistic-list>
该过程除PROC语句是必需的外,其它语句都是任选的,同时该
过程还可以使用多个OUTPUT语句,以形成所需的输出数据集
1.PROC MEANS 语句
PROC MEANS 语句的一般格式为:
PROC
MEANS
<option-list><statistic-kedwordlist>;
PROC MEANS语句开始调用均值过程。可以出现在PROC MEANS语
句里的选项常见的有:
(1)DATA =SAS- data-set(SAS数据集),是均值过程将要分
析处理的输入数据集的名字。若省略,则SAS系统将对最近
产生的SAS数据集进行分析处理。
(2)NOPRINT或PRINT,前者规定不输出任何描述统计量,而
后者则规定输出描述统计量。
(3)MAXDEC=number(数字),指定该过程的输出结果中小数
部分的最大位数(0或8),缺省时系统默认为2。
(4)ALPHA=VALUE(值),设置计算置信区间的置信水平,其
值在0到1之间。若规定ALPHA=0.1,则得到均值的90%的置信
区间,若缺省,系统默认ALPHA=0.05。
可以出现在PROC MEANS语句里的统计量(对分析的变量而言)
选项常见的有:
N:未缺省的观测个数、NMISS:缺省的观测个数、MEAN:均
值、STD:标准差、MIN:最小值、MAX:最大值、RANGE:极
差、SUM:总和、VAR:方差、USS:未修正平方和,即变量
2
原始值的平方、CSS:修正平方和,即 ( xi  x ) 也称为偏差平
方和、CV:变异系数、T:对应显著性水平  的t统计量值、
PRT:对应t值的概率、SUMWGT:加权和、SKEWNESS:偏度、
KURTOSIS:峰度、CLM:计算置信上限和下限、LCLM:置信
下限、UCLM;置信上限。
当PROC语句没有规定输出的统计量时,MEANS过程仅输出与VAR
语句规定的变量相对应5个描述统计量,它们分别是:未缺
省的观测个数、均值、标准差、最小值、最大值。
当PROC语句规定了输出统计量时,MEANS过程仅输
出所规定的统计量的值。
2.VAR语句
其一般格式:VAR 变量名
规定要求计算简单描述统计量的数值变量及次序。
若省略该语句,输入数据集中除在BY、CLASS、
ID、FREQ和WIEGHT语句中列出的变量之外所有
数值变量依次都被分别计算。
3.BY 语句
其一般格式为: BY variable-list;
根据BY变量定义的观测组分别计算各组相应的简单描
述统计量。注意,当使用BY语句时,要求输入数据
集已按BY变量排序的次序排列,除非指定
NOTSORTED
4.WEIGHT语句
WEIGHT语句一般格式为:WEIGHT
变量名;
该语句表示用给定的变量值对相应的这个观测中其它变量进行
加权。该变量值应大于0,若小于0或缺省,取该值为0。
WEIGHT语句通常用在每个观测的重要性不同的情形下。如当
询问未来市场走势时,很显然,专家对未来的判断要比一般
普通大众重要的多,这时就可用WEIGHT语句对专家给出的预
测值进行加权。
5.FREQ语句
FREQ语句一般格式为:FREQ 变量名;
该语句中变量(variable)的值是相应的这个观测中其它变量
值出现的次数。若变量的值<1或缺省,相应的观测不参加计
算统计量;若这个值不是正整数,取整数部分。
注意:WEIGHT语句与FREQ语句之间的区别。FREQ变量值表示其
它变量相应观测值出现的次数,而WEIGHT变量值则表示对其
它变量相应值进行加权,关于这一点可从以下例子中看出。
例5.5:
data q;
input a b @@;
cards;
4 4 5 7 3 4
;proc means;
freq b;
run;
proc means;
weight b;
run;
该程序指定变量b分别为变量a的频数和权重,其输出结果如下:
变量b作为频数变量的输出结果
N
Mean
Std Dev
Minimum
Maximum
-------------------------------------------------------------------15
4.2000000
0.8618916
3.0000000
5.0000000
--------------------------------------------------------------------
变量b作为权重变量的输出结果
N
Mean
Std Dev
Minimum
Maximum
--------------------------------------------------------3
4.2000000
2.2803509
3.0000000
5.0000000
---------------------------------------------------------
由以上输出结果可以看出,对变量a用变量b作为频数和作为权重,两者的结果是
不一样的。首先,两者观测次数不同,前者观测次数为变量b的所有值之和,而
后者的观测次数仍是对变量a的观测次数;其次,两者虽在均值、最大、最小值
上是一致的,但其标准差却不一样。
6.OUTPUT语句
OUTPUT语句给出用MEANS过程产生的输出数据集的信息(注意:
输出数据集中的统计量需重新命名)。其一般格式如下:
OUTPUT <OUT=SAS-data-set> <keyword=names>;
SAS-data-set规定用MEANS过程产生的输出数据集的名字,如果
该 选 项 缺 省 , SAS 系 统 自 动 按 DATAn 的 名 字 命 名 ;
keyword=names规定在这个新数据集中同关键词联系的输出变
量名字,关键词随着不同的过程而变化,但通常是一些描述
统计量或者输出到新数据集的其它值。
例如:Proc means ;var x;output out=outmean mean=meanx;
run;此例用过程MEANS计算变量X的均值。关键词mean=规定
变量X的均值用名字meanx作为输出数据集outmean中的变量。
7.CLASS语句
CLASS语句的一般格式为:CLASS
变量名;
该语句表示对指定的变量进行分类。当过程中使用该语句时,
SAS系统按指定的分类变量(variables-name)进行分类分
析。值得注意的是,使用CLASS语句进行分类分析,分类变
量不需要事先排序,这一点与使用BY语句是不同的。
8.ID语句
其一般格式为: ID variable;
该语句对MEANS过程产生的输出数据集增加一个或几个附
加变量,目的在于识别输出数据集里的观测。。
三、MEANS过程的应用
利用MEANS 过程求解例6.1。
解:根据题目要求,SAS程序编辑如下:
data incomes;
input income@@;
cards;
271 396 287 399 466 269 295 330 425 324 228 113
230 404 487 127 74 234 523 164 336 343 330 436
464 200 392 265 403 259 426 262 221 355 324 374
113 135 291 176 342 443 239 302 483 231 292 373
223 371 287 400 314 468 337 308 359 352 273 267
214 351 270 330 238 248 419 330 319 440 427 314
318 415 372 238 323 412 493 286 313 412
;
proc means data=incomes mean var std cv skewness
alpha=0.1 kurtosis t prt clm;
var income;run;
226
141
347
346
277
414
176
388
261
293
184
299
320
293
287
236
286
265
语句说明:DATA 步创建了一个名为incomes的SAS数据集,
PROC步调用均值过程(means),其中选择项分别为:
mean—均值、var—方差、std—标准差、 cv—标准差系数、
skewness—偏度、kurtosis—峰度、alpha=0.1—显著性水
平为0.1即置信水平为90%、t—t检验值、prt—对应t值的概
率、clm—上、下置信限、maxdec=2—保留两位有效小数,
分析变量为income,程序运行结果见输出
Analysis Variable : INCOME
Mean
Variance
Std Dev
CV
Skewness
Kurtosis
-------------------------------------------------------------------------313.36
8696.11
93.25
29.76
-0.14
-0.19
-------------------------------------------------------------------------T
Prob>|T|
Lower 90.0% CLM
Upper 90.0% CLM
---------------------------------------------------------33.60
0.0001
297.88
328.84
----------------------------------------------------------
由输出知,这一百户家庭平均人均收入为313.36元。根据推断
原理,这一地区家庭人均收入的平均值为313.36元,其90%的
置信区间为(297.88元 328.84元);由于偏度等于-0.14,
而峰度等于-0.19,所以可以认为这个地区家庭人均收入的分
布略向左偏,与正态分布相比,分布略微陡峭。
由该例可以看出,应用中常见到的一些描述性统计量的计算都
可用MEANS过程来得到。
第二节 描述统计的其它方法
一、ASSIST法
1.进入ASSIST模块
2.任务-数据分析-基础-汇总统计量
3.确定要分析的数据集
4.确定变量:分析变量、分组变量、所求统计
量等
5.提交
二、INSIGHT法
1.进入INSIGHT
2.确定要分析的数据集
3.分析-分布-分析变量-输出
4.选择欲输出的描述统计量
5.累计分布:检验样本数据是否来自正态总体
即分析变量是否服从正态分布
第三节、单变量分析与UNIVARIATE过程(单变量过程)
一、问题的提出
大家知道,一个随机变量的统计特性完全由其概率分布决定,换句话说,知
道了随机变量的概率分布也就知道了它所具有的统计特性,包括它的数字
特征如均值、方差、标准差、偏度、峰度等,但反过来并不成立,即仅知
道随机变量的部分数字特征并不能完全确定随机变量的统计特性。因此,
要比较充分地描述一个随机变量,利用MEANS过程计算它的部分数字特
征是不够的,还必须用其它反映变量统计特征的形式,如来自样本的极端
值、分位数、条形图(也称为直方图)、茎叶图、盒形图、正态概率图等
对变量进一步进行描述。
众所周知,正态分布族是一类在理论和实践上都十分重要的分布族,因此检
验样本是否来自正态总体,从而进一步推断总体是否服从正态分布非常必
要。例如在证券投资学中,有一个非常重要的理论—马柯威兹
(Markowitz)组合投资理论。该理论有许多假定,其中有一条重要的暗
含假定是:股票收益率服从正态分布。股票收益率是否服从正态分布,需
要通过相关数据加以检验。
以上这些实践中经常接触到的问题,借助SAS系统提供的UNIVARIATE过程
(单变量过程)即可解决。
二、UNIVARIATE过程(单变量过程)
(一)UNIVARIATE过程的主要功能
UNIVARIATE过程除可以完成类似MEANS过程的基本统计量的计算
外,还可以计算以下统计量、制作以下统计图:
▲描述变量极端值的情况;
▲计算分位数,如中位数,上、下四分位数等;
▲生成若干个描述变量分布的图,如茎叶图、盒形图等;
▲生成频率表;
对数据进行正态性检验。
1.UNIVARIATE过程的一般格式如下:
PROC UNIVARIATE <option-list>;
VAR variable-list;
BY variable-list;
FREQ variable;
WEIGHT variable;
ID variable-list;
OUTPUT <OUT=SAS-data-set><output-statistic-list>
<PCTLPTS=percentiles PCTLPER=perfix-name-list>
<PCTLNAME=suffix-name-list>;
2.UNIVARIATE过程中常用语句说明(用法与MEANS过程相同的语句或选择项省
略)
(1)PROC UNIVARIATE语句
其一般格式为:PROC UNIVARIATE <option-list>;
该语句中的选择项除与MEANS过程中的选择项类似的外,还有以下几个:
①FREQ,要求生成包括变量值、频数、百分数和累计频数的频率表。
②NORMAL,要求检验输入的数据是否服从正态分布,这个检验统计量的最
极 端值的概率也被输出。
③PLOT,要求生成一个茎叶图(或水平直方图),一个盒形图和一个正态
概率图。
(2)OUTPUT语句
该语句中选择项output-statistic-list的含义是输出统计量列表,具体
可列的统计量除MEANS中常用的统计量外,该过程还有以下一些统计量:
①Q3、Q1:上下四分位数,或75%和25%分位数;
②QRANGE:上下四分位数间的差,也就是Q3-Q1;
③MSIGN :符号统计量;
④PROBM :大于符号秩统计量的绝对值的概率;
⑤SIGNRANK: 符号秩统计量;
⑥PROBS :大于中心符号秩统计量的绝对值的概率;
⑦NORMAL: 检验正态性统计量;
⑧PROBN:检验数据来自正态分布的假设的概率。
⑨PCTLPTS=percentiles(百分位数)
规定在该过程中不能自动提供而用户又希望计算的百分位数。比如用户想计
算23%的分位数。
(二)几点说明
与MEANS过程输出的统计量一致的除外,该过程对每个数值
变量还输出以下统计量的值:
T:Mean=0,总体均值为0的假设检验的t统计量值。
Prob>|T|,自由度为n—1的t统计量大于T的绝对值的概率。
Num^=0,非0观测的个数。
Num>0,正观测的个数。
M(sign),总体均值为0假设检验时的中心符号统计量。
Prob>|M|,大于中心符号统计量绝对值的概率
Sgn Rank,总体均值为0假设检验的中心Wilcoxon符号秩统计量
值。
Prob>|S|,大于中心Wilcoxon符号秩统计量绝对值的概率。
100%Max,最大值。
Q3,Q1,Med,上下四分位数和中位数。
0%Min,最小值
Range,极差。
Q3-Q1,上下四分位数之差。
Mode,众数。
1%,5%,10%,90%,95%,99%百分位数。
Extremes,五个最大和最小值。
如果使用选项NORMAL,该过程还输出以下统计量:
W:Norma l或D:Normal,正态检验统计量。
Prob<W 或Prob>D分别与检验统计量W和D相对应的概率。
如果使用选项PLOT,该过程将输出以下图形
Stem Leaf,茎叶图。
Boxplot,盒形图。
Normal Probability Plot,正态概率图。
如果使用选项FREQ,该过程还将输出以下统计量
Value,变量值列表。
Count,变量值的频数。
Precents Cell,变量值的百分数。
Percents Cum,变量值累计百分数。
例6.2:计算例6.1中的集中趋势、离中趋势及分布形状等指标
data incomes;
input income @@;
cards;
271 396 287 399 466 269 295
230 404 487 127 74 234 523
464 200 392 265 403 259 426
113 135 291 176 342 443 239
223 371 287 400 314 468 337
214 351 270 330 238 248 419
318 415 372 238 323 412 493
;
Proc Univariate;
Run;
330
164
262
302
308
330
286
425
336
221
483
359
319
313
324
343
355
231
352
440
412
228
330
324
292
273
427
113
436
374
373
267
314
226
141
347
346
277
414
176
388
261
293
184
299
320
293
287
236
286
265
第七章、统计图表与SAS过程
在实际统计工作中,经过统计调查得到的大量的第一手资料,
也称原始资料多半是一个个具体的调查单位的资料。这些具
体调查单位的资料难以反映研究总体的内部结构、相互联系
及其规律性。因此,要想使调查的第一手资料对研究总体做
出概括的说明,必须对其进行整理。即使是别人已经加工过
的第二手资料,由于研究目的、内容不同,实际中往往也要
对其进行再加工。可以说,没有统计整理也就没有统计分析,
没有统计分析,调查得到的大量杂乱无章的统计资料将一无
是处、毫无用处,统计调查的目的也将无法实现。
实际中具体的统计整理工作,往往是通过统计分组来进行的。
所谓统计分组就是根据研究任务的需要,按某个标志将总体
分成若干个组成部分,并以统计表或统计图的形式直观地呈
现出来。
第一节、统计表与TABULATE过程
一、统计表的概念和种类
1.统计表的概念
统计表是以表格的形式简明地反映事物间数量关系的一种重要
的整理成果表达方式。它不仅可以代替冗长的文字叙述,而
且便于阅读,在进行统计分析和比较时也十分方便,因此其
应用非常广泛。
从构成要素上看,统计表由总标题、横行标题、纵栏标题和统
计数字四部分组成,其基本结构如下表:
标题(何时、何地)
顶线
横 行
总标题
纵栏总标题
子纵标题 1 … 子纵标题 n
隔线
子横标题 1
…
子横标题 k
…
数字区域
…
底线
例7.1某市200家企业2002年产值、利润情况经初步整理资料如下:
2000人以下的企业中国有企业10家, 产值15亿,利润1.5亿;集体企业14家,
产值10亿,利润1.6亿;合资企业3家,产值4亿,利润0.5亿。
2000—3000人的企业中国有企业20家, 产值20亿,利润2.5亿;集体企业34
家, 产值30亿,利润4.0亿;合资企业4家, 产8亿,利润1亿。
3000—4000人的企业中国有企业15家, 产值40亿,利润5.5亿;集体企业15
家, 产值20亿,利润2.5亿;合资企业2家,产值3.6亿,利润0.5亿。
4000—5000人的企业中国有企业20家, 产值30亿,利润3.5亿;集体企业15
家, 产值20亿,利润2.3亿;合资企业2家;产值5亿,利润0.8亿。
5000—6000人的企业中国有企业20家, 产值36亿,利润3.8亿;集体企业10
家, 产值28亿,利润2.5亿;合资企业1家,产值10亿,利润1.3亿。
6000人以上的企业中国有企业5家, 产值45亿,利润5.5亿;集体企业10家,
产值35亿,利润3.4亿;合资企业0家。
试根据以上资料,完成以问题:
(1)按所有制形式对200家企业进行分组;
(2)先对企业按人数分组,再按所有制形式进一步细分。
(1)以所有制形式为分组标志,则分组结果为表7.1:
某市 200 家企业 2002 年产值、利润情况
所有制形式
企业数
国有企业
集体企业
合资企业
90
98
12
总产值
(亿元)
186
143
30.6
总利润
(亿元)
22.3
16.3
4.1
(2)先对企业按人数分组,再按所有制形式进一步细分结果见表7.2:
某市 200 家企业 2002 年产值、利润情况
2000 人以下
2000 人
—
3000 人
3000 人
—
4000 人
4000 人
—
5000 人
5000 人
—
6000 人
6000 人以上
国有企业
集体企业
合资企业
国有企业
集体企业
合资企业
国有企业
集体企业
合资企业
国有企业
集体企业
合资企业
国有企业
集体企业
合资企业
国有企业
集体企业
合资企业
企业数
(个)
10
14
3
20
34
4
15
15
2
20
15
2
20
10
1
5
10
0
总产值
(亿元)
15
10
4
20
30
8
40
20
3.6
30
20
5
36
28
10
45
35
0
总利润
(亿元)
1.5
1.6
0.5
2.5
4.0
1.0
5.5
2.5
0.5
3.5
2.3
0.8
3.8
2.5
1.3
5.5
3.4
0.0
二、TABULATE过程
(一)TABULATE过程的功能及一般格式
TABULATE过程以分组报表的形式输出满足用户要求的描述性统
计量,它的主要功能是:
▲ 可以对总体按一个、两个或以上标志进行简单分组汇总;
▲ 可以对总体按两个或三个标志进行复合分组汇总;
▲
可以比较灵活的方式对每组进行合计,还可以计算每个分
组单元的百分比。
1.TABULATE过程的一般格式
TABULATE过程的一般格式如下:
PROC TABULATE <option-list>;
CLASS class-variable-list;
VAR analysis-variable-list;
TABLE <<page-expression,> row-expression,> column-expression
</table-option-list>;
BY variable-list;
FREQ variable;
WEIGHT variable;
FORMAT variable-list-1 format-1 <…variable-list-n format-n>;
2. TABULATE过程常用语句
(1) PROC TABULATE语句
其一般格式为:PROC TABULATE <option-list>;
该语句表示开始执行TABULATE过程。一般来说,TABULATE
报表过程总是伴随着一个或多个TABLE语句来规定如何制表。用
在TABLE语句中的分类变量必须用CLASS语句加以说明,而分析
变量一般须用VAR语句加以说明。该语句中的选择项常用的有:
①DATA=SAS-data-set:指定TABULATE过程所使用的输入数据集,
缺省时使用最新创建的SAS数据集。
②FORMAT=format-name(格式名):对每个报表单元规定输出
格式,如果没有规定此选项,系统自动以BEST12.2代替。此
选项对减少报表中输出数值的域宽非常有用。
③NOSEPS:要求表中不出现水平分隔线。
(2)CLASS语句
CLASS语句的一般格式为:CLASS class-variable-list;
该语句规定输出报表中的分组标志。在此后的TABLE语句中
出现的任一分组标志必须事先在CLASS语句中予以定义。作为
分组标志,这些变量一般为字符型的。若是数值型的,其取
值要求有限,否则应事先把它处理成几个离散值。
(3)VAR语句
VAR语句的一般格式为:VAR analysis-variable-list;
该语句输出报表中的分析变量。所有在TABLE语句中出现的分析变量必须事
先在该语句中予以定义。作为分析变量,要求其为数值型,而且通常为
连续型变量。
(4)TABLE语句
TABLE语句的一般格式为:
TABLE
<<page-expression,>
row-expression,>
columnexpression
</table-option-list>;
这是报表过程中最关键、最需要注意的一个语句。因为输出报表的内容、形
式、结构都是通过该语句中的各表达式通过组合而得到的,具体说是通
过维表达式、行表达式和列表达式组合得到的。
①维表达式
TABLE语句由一至三个用逗号隔开的维表达式和选项组成。如果规定三维即
由两个逗号隔开的三个表达式,则最左边的维定义页,中间的定义行,
而最右边的定义列。如果规定两维即表达式间只有一个逗号,则左边为
行,右边为列。如果只有一维即表达式间没有逗号,则定义列。维表达
式由分类变量(来自CLASS语句)、分析变量(来自VAR语句)、统计量
(要求对分析变量所做的内容)等操作元素和星号(*)、空格、圆括号
()、逗号(,)尖括号(<>)等操作符连接而成的。
②操作符
操作符用于连接操作元素。各操作符的具体含义如下:
星号(*),当两个操作元素用星号(*)连接时,表示在维内
对操作元素进行交叉连接,如例5.1中的people*type ,
结果形成交叉连接,即复合分组。
空格对操作元素进行并排连接, 比如amount output
profit,结果形成了三个分析变量并排输出。
圆括号(),对操作元素分组或规定先后次序。
逗号(,)当两个操作元素之间以逗号(,)隔开时,表示分
开表的维数及横过维的交叉元素,如例7.1中的
type,amount,结果形成了一张二维表。
尖括号(<>),规定分母的定义。
③统计量,作为操作符的统计量与MEANS过程中所列出的常见
的统计量基本相同,这里不在赘述。
例7.1的程序:
data qiye;
input people $ 1-11 type $ 13-20 amount output profit;
label amount=‘企业数’ output=‘产值’ profit='利润';
cards;
2000人以下 国有企业 10 15 1.5
2000人以下 集体企业 14 10 1.6
2000人以下 合资企业 3 4 0.5
2000-3000人 国有企业 20 20 2.5
2000-3000人 集体企业 34 30 4.0
2000-3000人 合资企业 4 8 1
3000-4000人 国有企业 15 40 5.5
3000-4000人 集体企业 15 20 2.5
3000-4000人 合资企业 2 3.6 0.5
4000-5000人 国有企业 20 30 3.5
4000-5000人 集体企业 15 20 2.3
4000-5000人 合资企业 2 5 0.8
5000-6000人 国有企业 20 36 3.8
5000-6000人 集体企业 10 28 2.5
5000-6000人 合资企业 1 10 1.3
6000人以上 国有企业 5 45 5.5
6000人以上 集体企业 10 35 3.4
6000人以上 合资企业 0 0 0
;
proc tabulate;
class people type;
var amount output profit;
table type,amount output profit;
table people*type,amount output profit;
run;
程序说明:上述程序首先利用DATA步创建了一个名为qiye的
SAS数据集,其中label语句对amount、output、profit
进行了说明。程序后半部分调用tabulate报表过程,其中
class语句中的变量为分组标志,本例中分组标志为企业人
数和企业所有制形式;var语句中的变量为分析变量,本例
选择企业数、产值和利润为分析指标;tabulate过程中的
第一个table按type(企业所有制形式)分组并对企业数、
产值和利润进行汇总,与例7.1中的第一个问题对应;第二
个table先按people(企业人数)分组,再按type进行复
合分组,对应于例7.1中的第二个问题。程序运行结果如下:
data qiye;
input people $9. type $ amount output profit;
label amount=‘企业数’ output=‘产值’ profit='利润';
cards;
2000d
g 10 15 1.5
2000d
j 14 10 1.6
2000d
h 3 4 0.5
2000-3000 g 20 20 2.5
2000-3000 j 34 30 4.0
2000-3000 h 4 8 1
3000-4000 g 15 40 5.5
3000-4000 j 15 20 2.5
3000-4000 h 2 3.6 0.5
4000-5000 g 20 30 3.5
4000-5000 j 15 20 2.3
4000-5000 h 2 5 0.8
5000-6000 g 20 36 3.8
5000-6000 j 10 28 2.5
5000-6000 h 1 10 1.3
6000u
g 5 45 5.5
6000u
j 10 35 3.4
6000u
h 0 0 0
;
proc tabulate;
class people type;
var amount output profit;
table type,amount output profit;
table people*type,amount output profit;
run;
输出7.1(A)
-------------------------------------------------------------|
|
企业数
|
产值
|
利润
|
|
|------------+------------+------------|
|
|
SUM
|
SUM
|
SUM
|
|---------------------+------------+------------+------------|
|TYPE
|
|
|
|
|---------------------|
|
|
|
|国有企业
|
90.00|
186.00|
22.30|
|---------------------+------------+------------+------------|
|合资企业
|
12.00|
30.60|
4.10|
|---------------------+------------+------------+------------|
|集体企业
|
98.00|
143.00|
16.30|
--------------------------------------------------------------
输出7.1(B)
-------------------------------------------------------------|
|
企业数
|
产值
|
利润
|
|
|------------+------------+------------|
|
|
SUM
|
SUM
|
SUM
|
|---------------------+------------+------------+------------|
|PEOPLE
|TYPE
|
|
|
|
|----------+----------|
|
|
|
|2000 人以下|国有企业 |
10.00|
15.00|
1.50|
|
|----------+------------+------------+------------|
|
|合资企业 |
3.00|
4.00|
0.50|
|
|----------+------------+------------+------------|
|
|集体企业 |
14.00|
10.00|
1.60|
|----------+----------+------------+------------+------------|
|2000|国有企业 |
20.00|
20.00|
2.50|
|3000 人
|----------+------------+------------+------------|
|
|合资企业 |
4.00|
8.00|
1.00|
|
|----------+------------+------------+------------|
|
|集体企业 |
34.00|
30.00|
4.00|
|----------+----------+------------+------------+------------|
|3000|国有企业 |
15.00|
40.00|
5.50|
|4000 人
|----------+------------+------------+------------|
|
|合资企业 |
2.00|
3.60|
0.50|
|
|----------+------------+------------+------------|
|
|集体企业 |
15.00|
20.00|
2.50|
|----------+----------+------------+------------+------------|
|4000|国有企业 |
20.00|
30.00|
3.50|
|5000 人
|----------+------------+------------+------------|
|
|合资企业 |
2.00|
5.00|
0.80|
|
|----------+------------+------------+------------|
|
|集体企业 |
15.00|
20.00|
2.30|
|----------+----------+------------+------------+------------|
|5000|国有企业 |
20.00|
36.00|
3.80|
|6000 人
|----------+------------+------------+------------|
|
|合资企业 |
1.00|
10.00|
1.30|
|
|----------+------------+------------+------------|
|
|集体企业 |
10.00|
28.00|
2.50|
|----------+----------+------------+------------+------------|
|6000 人以上|国有企业 |
5.00|
45.00|
5.50|
|
|----------+------------+------------+------------|
|
|合资企业 |
0.00|
0.00|
0.00|
|
|----------+------------+------------+------------|
|
|集体企业 |
10.00|
35.00|
3.40|
--------------------------------------------------------------
(二)说明
1、全类变量ALL
全类变量表示仅有一个值的特殊分类变量。当ALL嵌入某个交
叉时,ALL不考虑分类变量的水平,而用ALL来生成子集及总
和。
例如在例7.1中,若把第一个TABLE语句改为:
table type all,amount output profit;
把第二个TABLE语句改为:
table people all,amount type*output profit;
则输出7.1(A)将变为输出7.1(C),而输出7.1(B)将变为输出7.1(D)。
运用ALL变量就注意的问题:(1)先得分组;(2)只能对相同变
量的变量值汇总。
输出 7.1(C)
-------------------------------------------------------------|
|
企业数
|
产值
|
利润
|
|
|------------+------------+------------|
|
|
SUM
|
SUM
|
SUM
|
|---------------------+------------+------------+------------|
|TYPE
|
|
|
|
|国有企业
|
90.00|
186.00|
22.30|
|合资企业
|
12.00|
30.60|
4.10|
|集体企业
|
98.00|
143.00|
16.30|
|ALL
|
200.00|
359.60|
42.70|
--------------------------------------------------------------
----------------------------------------------------------------------|
|
|
TYPE
|
|
|
|
|--------------------------------|
|
|
|
| 国有企业| 合资企业 | 集体企业 |
|
|
|
|----------+----------+----------|
|
|
| 企业数 | 产值 | 产值 | 产值 |
利润 |
|
|---------+----------+----------+----------+-----------|
|
| SUM | SUM
| SUM
| SUM
|
SUM
|
|---------------+---------+----------+----------+----------+----------|
|PEOPLE
|
|
|
|
|
|
|2000 人以下
|
27.00|
15.00|
4.00|
10.00|
3.60 |
|2000-3000 人 |
58.00|
20.00|
8.00|
30.00|
7.50 |
|3000-4000 人 |
32.00|
40.00|
3.60|
20.00|
8.50|
|4000-5000 人 |
37.00|
30.00|
5.00|
20.00|
6.60|
|5000-6000 人 |
31.00|
36.00|
10.00|
28.00|
7.60|
|6000 人以上
|
15.00|
45.00|
0.00|
35.00|
8.90|
|ALL
| 200.00|
186.00|
30.60|
143.00|
42.70|
-----------------------------------------------------------------------
2.百分数:PCTN和PCTSUM
PCTN:每组单位数占总体单位数的比重
PCTSUM:每组标志总量占总体同种标志总量的比重
其一般格式为:PCTN或PCTSUM<分母说明>=标签
百分数的计算中,分母的定义不同,得到的结果自然不同。
通常分母的选取有以下三种情况:
(1)行总和百分数。如果在列维中的所有分类变量而且
也只有列维中的分类变量出现在分母中时,其分母值为
每行的总和。
(2)列总和百分数。如果在行维中的所有分类变量而且
也只有行维中的分类变量出现在分母中时,其分母值为
每列的总和。
注意: PCTSUM必须用大写字母;
分母在逗号的左边,计算的是列百分比
分母在逗号的右边,计算的是行百分比
如例7.1中的过程步程序改为:
proc tabulate;
class people type;
var output profit;
freq amount;
table type,people*(n pctn<people>) ; run;
table people,type*(n pctn< people>); run;
则第一个table语句计算了每单元格上的单位数占行总
单位数的百分数,第二个table语句计算了每单元格
上的单位数占列总单位数的百分数。
又如:将例7.1的过程步改为:
proc tabulate;
class people type;
var amount output profit;
table type,people*output*(sum PCTSUM<people>);
table type,people*profit*(sum PCTSUM<people>);
run;
则第一个语句计算各组产值占相应所有制类型总产值的比重;
第二个语句计算各组利润占相应所有制类型总利润的比重。
(三)、TABULATE过程的应用举例
例7.2 下列程序中的数据来自某企业2002年产品销售资
料。其中变量region表示销售的地区,其中es代表东
部地区、so代表南部地区、we代表西部地区、ne代
表北部地区;变量citisize表示该地区的规模大小,用
L、M和S分别代表大、中、小三种规模;变量POP代
表该地区的人数;变量product代表产品类型,分别
有a100(打印机)、a200(计算机)和a300(复印
机)三种;变量saletype代表销售方式,其中R代表
零售,W代表批发;变量quantity代表销售量,而
income代表销售收入。
data sales;
input region $ citisize $ pop product $ saletype $ quantity income
@@;
CARDS;
es s 25000 a100 r 150 3750 ne s 37000 a100 r 200
5000
so s 48000 a100 r 410 10250 we s 32000 a100 r 180
4500
es m 125000 a100 r 350 8750 ne m 237000 a100 r 600
15000
so m 348000 a100 r 710 17750 we m 432000 a100 r 780
19500
es l 62500 a100 r 750 18750 ne l 837000 a100 r 800
20000
so l 748000 a100 r 760 19000 we l 93200 a100 r 880
22000
es s 25000 a100 w 150 3000 ne s 37000 a100 w 200
4000
so s 48000 a100 w 410 8200 we s 32000 a100 w 180
3600
es m 125000 a100 w 350 7000 ne m 237000 a100 w 600
12000
so m 348000 a100 w 710 14200 we m 432000 a100 w 780
15600
proc tabulate noseps;
class region citisize product saletype;
var pop quantity income;
table product,region*citisize,saletype*(quantity income);
table region all ,pop quantity income;
table region citisize,product*saletype quantity income;
table region*product all ,(saletype all)*(quantity income);
Run;
第二节、统计图与SAS过程
一、统计图的基本概念
统计图是用点、线、面等图形来直观地反映变量分布特征、内部结构、
变量间关系及其发展变化状况的一种常用形式。常见的统计图有:
直方图、饼图、柱状图、散点图、折线图曲线图、统计地图等。
实际应用过程中,由于不同的统计图所反映的问题特征和内容不同,
因此对于不同类型的资料,不同的研究目的就应该选用不同类型的
统计图。
一般来说,直方图用来表示经统计分组后各组的频数分布状况,其条
形的高度代表各组的频数或频率。如例5.1中,若按企业人数进行
分组,得到的企业频数分布再绘制成直方图见图5.1。
饼图用来反映事物的内部结构,必须用相对数。饼图的每个扇面代表
某一部分占总体的比重,因此各部分之和为1。如居民的消费结构、
GDP的构成等就可以用饼图来反映。
柱状图用来表示不同总体某一指标的数量特征,一般用于不同时间、
地点的某一指标间的对比。如我们常见的某一企业、地区历年产值、
利润等指标的柱状图。
当需要考察两变量间关系时通常先画散点图,它可以形象地反映出在
专业上两个连续变量之间有无关系,是直线关系还是曲线关系等。
例7.3 某大型家具厂过去两年中引进了14种新产品。市场调查
部需要测定头一年的销售额与某个适当的自变量之间的关系,
作为今后制定推销计划和广告计划之用。调查人员建立了一
个名为“顾客知悉率”的变量,用产品问世后三个月内听说
过这种产品的顾客的百分比来测量,试分析产品销售额与顾
客知悉率、广告费之间的关系。调查数据如下:
产品
A B
C
D
E
销售额
82
46
17
21
112
顾客知悉率%
50
45
15 15
70
广告费
1.8
1.2 0.4 0.5 2.5
F
G
H
I
J
K
L
M
N
55
80
43
79
24
30
11
40
60
25
50
20
30
10
2.5 1.5 1.2
1.6
1.0
1.5
0.7
1.0
0.8
105 65
75
60
二、散点图、折线图与GPLOT(绘图)过程
GPLOT过程用来绘制变量间的散点图、折线图及曲线图。在
数据处理中常常希望直观地了解数据的变化趋势,数据间的
相关关系等,该过程能很方便地实现这一目的。
1.GPLOT过程的主要功能
假设已存在的SAS数据集含有n个观测, m个变量。该过程
能够对数据集中任两个变量的n个观测值画出用户满意的散
点图、折线图及曲线图。对于这些图形,可以做到以下几点:
(1)符号可以根据用户的要求进行选择,在图上可以用变量值
加标签;
(2)坐标轴的刻度间隔及标记可以选择;
(3)图的大小可以选择,在一张纸上可以画两个以上的图,一
张图也可画在两页以上的纸上;
(4)两个以上的图形可以重叠在一张图上。
2.GPLOT过程的一般格式
GPLOT过程由下列语句构成:
PROC GPLOT <option-list>;
PLOT request-list</option-list>;
BY variable-list;
SYMBOL <option-list>;
上述语句中BY语句是任选的;而PLOT语句必须出现用于告诉
过程对哪些变量作图,每次调用GPLOT过程时可以规定任意
多个PLOT语句;在每个PLOT语句中可以要求绘制任意多个
图形。以下对GPLOT过程中的语句进行说明:
(1)PROC GPLOT语句
PROC GPLOT语句的一般形式为:PROC GPLOT <optionlist>;
该语句的常用选项有以下几类:
① 输入数据集选项DATA=SAS-DATA-SET:用于制图的输入
数据集,缺省时系统用最新创建的SAS数据集代替。
② 图形坐标轴选项:
A:UNIFORM—当使用BY语句时,要求对这些BY组使用一致
的刻度,以便比较。
B:NOMISS—把任何变量含有丢失值的那些观测从散布图的
坐标轴的计算中删除。如没有此选项,某个变量含有丢失值
的观测虽不能作点图,但没有丢失的另一变量值在坐标轴中
仍起作用。
③图形大小选项:
A:VPERCENT= percent-list |VPCT= percentlist(百分比列表)—规定该过程产生的图形在垂直方
向占一页中的比例。如VPCT=33表示PLOT过程在
每一页打印3张图,每张图占一页的1/3;又如
VPCT=50 25 25表示该过程每一页在纵向打印3张
图,第一张占全页的一半,另两张各占1/4。
B:HPERCENT= percent-list |HPCT= percentlist(百分比列表)—规定该过程产生的形图在水平方
向占一页中的比例。
(2)BY语句:BY variable-list;
根据BY变量定义的观测组分别画出散点图。注意,当
使用BY语句时,要求输入数据集已按BY变量排序的
次序排列。
(3)PLOT语句
PLOT语句的一般形式为:PLOT requestlist</option-list>;
GPLOT过程按PLOT语句所规定的要求和选项
作图。
①request -list:规定作图变量(垂直变量和
水平变量)以及制图用于画点的作图字符。
它有以下形式:
A:垂直变量*水平变量=‘字符’—规定一个字符作
为作图符号。例如:plot y*x=’+’;该语句要求作Y
对X的散点图,且每个散点用+表示。
B:垂直变量*水平变量=变量—作图字符由变量给出。
变量可以是字符变量,也可以是数值变量。变量的
格式值中第一个非空格字符用来作为绘图符号。
注意,当用同一个变量与其它多个变量在同一个坐标
中作图时,可以用星号(*)进行简化。如语句
plot y*(x1-x3);相当于语句plot y*x1 y*x2
y*x3;
② option-list(选项):出现在斜杠(/)后面的选项主要有以
下几项:
A:VAXIS(HAXIS)=tick-value-list(标志值列表)|BY
n—定义沿垂直(或水平)坐标轴相等间隔的刻度标记值。
这些值可以是均匀上升或下降的,也可以不是;可以用BY
n的方式规定刻度的增量。
B: VREF(或HREF)=value-list—要求在纵轴或横轴的一
些规定的数上作水平参照线或垂直参照线。
如果希望在同一张图上重叠作两个或两个以上图形时,可以
在一个PLOT语句里规定多项要求,并在选项中规定
overlay。
例如:语句plot y*x a*b=’*’/overlay;要求在同一坐标系里
画散点图。
(4) SYMBOL语句
SYMBOL语句的一般形式为:SYMBOL <optionlist>;
该语句在GPLOT过程中是可选项。它的作用是规定作
图的符号,颜色、大小以及散点之间的连接方式。
其中选择项主要有以下几项:
①Value=symbol|V=symbol:定义数据点的符号。
其中symbol主要有:PLUS—“+”,系统缺省值;
STAR—代表“*”;SQARE—代表方块;
DIAMOND—代表菱形;TRANGLE—代表三角形;
DOT—代表句号;POINT—代表小数点;
CIRCLE—代表圆圈;HASH—代表“#”;
NONE—代表没有符号。
• ②I=interpolation:定义数据点之间的连接方式。
•
其中interpolation主要有:JOIN—用直线连接各
数据点;SPLINE—用光滑的曲线连接各数据点;
NEEDLE—从数据点到横坐标画垂线;SMXX—用
样条方法平滑噪音数据,各数据点不必全落在曲线
上。XX取01到99,此数据越大越平滑;RL—作回
归直线;RQ—作二次回归曲线;RC—作三次回归
曲线;RLCLI95—作单个预报值的95%的置信带;
RLCLM95—作均值的95%置信带,95可换为90
或99。
③WIDTH=value|W=value:定义连线的线宽,
数字越大,线越宽。
④COLOR=color|C=color:定义颜色。
Color的选项主要有:RED—红色;
GREEN—绿色;BLUE—蓝色;YELLOW—
黄色等。其中CI表示回归线的颜色,CV表示
散点的颜色,而CO则表示置信带的颜色。
注意:(1)在一个GPLOT过程中可以同时使
用多个SYMBOL语句,此时可用SYMBOL后
加一个数字以示区别;
(2)SYMBOL语句具有遗传性,即一旦使
用了SYMBOL语句系统就一直保持有效直到
重新定义或定义一个空SYMBOL语句为止。
3.GPLOT过程的应用举例
作为一个应用,我们给出例5.3顾客知悉率对销售额散点图程序:
data AD;
input sales knowrate adexpend @@;
lable sales='销售额' knowrate='顾客知悉率' adexpend='广告
费';
cards;
82 50 1.8 46 45 1.2 17 15 0.4
21 15 0.5 112 70 2.5 105 75 2.5
65 60 1.5 55 40 1.2 80 60 1.6
43 25 1.0 79 50 1.5 24 20 0.7
30 30 1.0 11 5 0.8
;
proc gplot;
plot sales*knowrate/haxis=0 to 80 by 20 vaxis=0 to 120
by 20;
symbol v=star;
run;
上述程序如果稍做改动将得到广告费对销售额的曲线
图。程序如下:
data adver;
set ad;run;
proc sort;
by adexpend;run;
proc gplot;
plot sales*adexpend/haxis=0 to 3 by 0.5
vaxis=0 to 120 by 20;
symbol v=star i=spline c=red width=2;
run;
问题:为什么要按广告费排序?不排序会怎样?
为了更好地了解GPLOT过程的功能及其使用方法,下
面我们再举一例。
例7.4 根据给定的家庭年收入与年食品支出数据作家
庭年收入对年食品支出预测值的95%的置信带,
其中散点用星号,红色;回归线用蓝色,线宽为2,
标题是“家庭年收入对年食品支出的95%的置信
带”。
解:根据题目要求,程序编辑如下:
data shoping;
input expend income number age
hire@@;
lable expend='年食品支出:(千元) '
income=' 年收入'
number=' 家庭人口数' age=' 收入最高者
年龄'
hire=' 房屋是否购买';
cards;
4.7 24 3 32 1 5.2 29 3 28 1 6.1 30 2 25 0 4.8 23 1 43 1
10.1 52 4 50 0 9.2 61 2 55 0 6.5 33 3 32 0 5.4 28 2 28 1
7.8 41 1 37 0 9.8 53 6 54 0 4.9 42 3 30 1 7.3 44 4 31 0
5.2 26 1 28 1 3.2 12 5 48 0 3.4 18 3 42 0 7.2 47 1 32 1
15.6 112 6 60 0 13.7 85 5 47 0 5.1 27 2 33 0 2.9 13 2 29 1
3.8 19 1 26 1 7.2 38 1 45 1 4.9 25 4 43 1 10.2 62 3 30 0
10 54 4 55 0 4.8 28 3 33 1 4.7 29 2 29 1 5.3 34 1 26 0
4.4 30 1 25 1 10.3 57 6 48 0 7.6 45 4 55 0 7.3 47 3 31 1
5.1 36 1 32 1 3.3 19 4 29 1 4.6 28 4 29 0 2.8 14 2 43 1
3.0 20 5 33 1 8.0 49 3 35 0 13.8 87 3 63 0 12.4 72 2 34 0
2.5 12 1 23 1 4.3 28 2 27 1 3.1 14 1 25 1 3.1 19 1 28 1
7.7 39 4 30 0 4.2 27 2 51 0 10.1 64 5 45 1 9.6 53 5 47 0
4.7 27 3 28 0 5.5 28 3 29 1 6.1 33 4 32 0 5.4 29 1 25 1
4.8 24 1 27 1 9.8 55 7 46 0 6.9 43 5 48 0 8.0 45 4 52 0
5.8 34 3 36 1 2.9 17 1 29 1 5.1 26 2 32 0 3.2 15 1 24 1
4.1 21 1 28 1 7.5 50 2 42 0 13.1 78 3 58 0 5.5 27 1 68 0
5.1 31 2 33 1 12.5 73 2 43 0 4.5 29 3 38 1 3.2 20 1 31 1
7.5 38 4 35 0 9.7 51 5 51 0 5.3 33 3 29 1 10.2 53 4 52 0
4.8 43 3 30 1 7.1 49 1 33 1 8.5 40 2 35 1 9.1 46 3 40 0
8.7 43 4 37 0 10.3 51 3 43 1 6.4 34 2 32 0 5.2 38 3 37 0
• ;
proc gplot ;
plot expend*income/vaxis=0 to 16 by 2;
symbol i=rlcli95 cv=red ci=blue
width=2 v=star;
title '家庭年收入对年食品支出的95%的置信
带';
run;
三、条形图、饼图、柱状图与GCHART过程
GCHART过程是用图形的方式形象地再现变量的取值
及变量之间关系的一种常用统计分析方法。该过程
把数据集中的变量以条形图、饼图、柱状图等方式
形象地描述出来,使得用户能够直观地了解它们的
特征。
1.主要功能
GCHART过程的主要功能有:
(1)可以产生条形图、饼图和柱状图。在形式上,这
些图形主要通过相应的语句来执行,其中垂直条形
图由VBAR语句执行,水平条形图由HBAR语句执行,
饼图由PIE语句执行,而柱状图由BLOCK语句执行。
通过选择不同的语句,形成不同的图形。
(2)在内容上,每种图形所代表的意义可以不同。
这主要通过选择TYPE=统计量类型,确定图形所代
表的含义。这里统计量类型常见有:FREQ(频
数)、PCT(百分数)、CFREQ(累计频数)、
SUM(总和)、MEAN(平均值)。
(3)在内部结构上,每种图形可以进行多种形式的
分组。这主要通过选择分组变量来控制。常见的分
组变量有:
★用于分组的变量选项DISCRETE
★用于并列分组的选项GROUP=
★用于分子组(层叠分组)的选项SUBGROUP=
★对连续变量用区间中点定位的选项MIDPOINTS=
★选项SUMVAR=规定收集对均值、总和、或频数的
汇总变量。
2.GCHART过程的一般格式
GHART过程的一般格式如下:
PROC GCHART <option-list>;
BY variable-list;
VBAR variable-list</standard-option-list><VBAR-specific-option-list>;
HBAR variable-list</standard-option-list><VBAR-specific-option-list>;
PIE variable-list</standard-option-list><VBAR-specific-option-list>;
BLOCK variable-list</standard-option-list><VBAR-specific-option-list>;
在GCHART过程中,可以跟随任意多个作图要求的语
句,也就是说一个GCHART过程能够画出用户需要
的任意多个不同图形。各作图语句中的基本选项基
本一致,而跟在其后的特殊选项则因所绘图形不同
而有所不同,各语句的作用及选项内容如下:
(1)PROC GCHART语句
其一般形式为:PROC GCHART <option-list>;
该语句表示调用GCHART过程,其后的选项主要是给
出作图所用的输入SAS数据集。如没有指定,则使
用系统最新创建的SAS数据集。
(2)BY语句与以前介绍的作用和用法基本相
同,不再赘述。
(3)VBAR语句、HBAR语句、PIE语句和
BLOCK语句
这几个语句的格式、选项和用法基本相同,所
不同的是它们所作图形的区别。VBAR语句、
HBAR语句、PIE语句和BLOCK语句分别对
跟在其后的一个变量或多个变量作垂直条形
图、水平条形图、饼图和柱状图。由于它们
之间格式基本相同,这里仅以VBAR语句为例
介绍如下:
VBAR语句的一般形式为:VBAR variable-list</standardoption-list>
<VBAR-specific-option-list>;
该语句表示根据给定的变量作垂直条形图,注意这里变量通常
是字符型的。若是连续型的,需在选项中规定discrete以明
确这是做每个离散值的图形,否则系统将根据需要调整图形
的个数。VBAR语句中的特殊选项有以下几类:
①坐标轴选项:VAXIS(HAXIS)=tick-value-list(标志值
列表)|BY n—定义沿垂直(或水平)坐标轴相等间隔的刻
度标记值。这些值可以是均匀上升,也可以不是;可以用BY
n的方式规定刻度的增量。如果坐标轴不是均匀上升的,需
给出具体的刻度。
如:VAXIS=0 5 20 50 100;则GCHART过程将按给定的刻
度作图。
②MIDPOINTS=value-list:规定每个图形表示的区间中点,
以此来确定变量的变化范围,该选项通常对连续变量非常有
用。当没有规定该选项时,系统将自动选择图形的间隔。注
意这里的取值既可以是等间距的,又可以是不等间距的。
③LEVELS=number:当作图变量为连续变量时,规定所作条
形的个数。
④SUMVAR=variable:规定用来汇总概括数据特征的均值、
频数或总和的变量。当与TYPE连用时,若TYPE规定的既不
是MEAN(均值),也不是SUM(总和)时,过程将对
SUMVAR所指定的变量求和,也就说TYPE的规定将无效。
⑤TYPE=statistic:规定图形所代表的统计量的值。该选项
缺省时系统指定TYPE=FREQ,当规定了选项SUMVAR,
则缺省时为SUM。选项TYPE除SUM、MEAN、FREQ外,
还可取PERCENT(观测的百分比)、CFRQ(观测的累计
频数)、CPERCENT(观测的累计百分数)。
⑥GROUP=variable:该选项只能用在VBAR语句、HBAR语
句和BLOCK语句之中,用于产生并列的一些图形,每个图
形代表variable的一个取值中的观测的统计量值。
⑦SUBGROUP= variable:该选项与GROUP一样也只能用
在VBAR语句、HBAR语句和BLOCK语句之中,用于产生对
每个总量进行细分,即把总量拆分为各个部分。
SUBGROUP中的变量一般为字符型变量,如果是数值型的,
取值必须有限。如以下语句(见例7.5):
block year/subgroup=property sumvar=gdp;
表示对每年产生一个柱状图,每个柱上又按产业进一步细分。
3.GCHART过程的应用举例
作为一个应用,我们首先给出例7.1中按企业人数分组所形成
的直方图的程序:
data qiyeshu;
input people $10. amount;
cards;
2000
27
2000-3000 58
3000-4000 32
4000-5000 37
5000-6000 31
6000
15
;
proc gchart ;
Vbar people/sumvar=amount;
run;
注:Vbar后面的变量一般为字符型
例7.5 2001年我国城镇居民家庭平均每人全年消费性支出如下(单位:元):
食品
衣着 家庭设备 医疗保健 交通通讯 娱乐教育 居住 其它
2014.02 533.66 438.92
343.28
457.02
690.00 547.96
284.13
试根据以上资料作出城镇居民家庭平均每人全年消费性支出饼型图。
解:根据题目要求,程序编辑如下:
data expend;
input class $ x @@;
cards;
食品 2014.02 衣着 533.66 家庭设备 438.9 医疗保健 343.28
医疗保健 257.02 娱乐教育 690.00 居住 547.9 其它 284.13
;
proc gchart;
pie class/sumvar=x;
run;
注:pie后面的变量一般为字符型
注意当变量CLASS不作为字符变量,而是作为数值变量,并用1,2,3,…,
8来代表每种类型的消费时,必须使用选项discrete,否则将得不到所想
要的结果。
例7.6 2000年、2001年和2002年我国国内生产总值(GDP)成功地实现
了8万亿、九万亿、十万亿三级跨越,具体数据(单位:万亿)如下:
年份
GDP
第一产业
第二产业
第三产业
2000年 89442.2
14628.2
44935.3
29878.7
2001年 95933.3
14609.9
49069.1
32254.3
2002年 102398.6
14883.0
52982.4
34533.2
试根据以上资料按年份分产业作出我国这几年GDP的柱状图。
解:根据题目要求,程序编辑如下:
data GDP;
input year $ property $ gdp;
cards;
2000 first 14628.2
2000 second 44935.3
2000 third 29878.7
2001 first 14609.9
2001 second 49069.1
2001 third 32254.3
2002 first 14883.0
2002 second 52982.4
2002 third 34533.2
;
proc gchart;
block year/subgroup=property sumvar=gdp;
run;
注:block后面的变量一般为字符型
第八章 相关分析
一、问题的引入
在实际生活中,我们常常会遇到这样一类问
题:某个或某几个变量的变动会引起另一个
变量发生变动,但变动的结果不是唯一确定
的,亦即变量之间的关系不是一一对应的,
因而不能用函数关系进行表达,变量之间的
这种关系在统计学中称为统计关系,相关分
析就是研究具有统计关系的变量之间关系强
弱程度的一种统计方法。作为引例,我们首
先给出几个与相关分析有关的案例。
例8.1 下表是1985~2001年17年间我国城镇居民
家庭人均收入和人均消费支出的资料,试分析两
者之间的关系。
表8.1
1985~2001年我国城镇居民家庭人均收入和支出资料
单位:元
年度
85
86
87
88
89
90
91
92
93
人均收入
802
931
1089
1431
1568
1686
1925
2356
3027
人均消费
685
828
916
1119
1261
1387
1544
1826
2336
年度
94
95
96
97
98
99
2000
2001
人均收入
3979 4283
4839
5160
5425
5854
6280
6860
人均消费
3179 3893
3919
4186
4332
4616
4953
5309
由经济学知识我们知道:家庭消费支出随家庭收入的变化而
变化。一般来说家庭收入越高,其家庭支出也将越大,表8.1也反
映了这方面的特点,但家庭消费支出不仅仅受家庭收入影响,它
还受到诸如价格水平、生活习惯、未来支出的预期、地理位置等
因素的影响。因此,可以认为家庭人均消费支出与人均收入之间
的关系是统计关系。问题是两者之间线性关系程度如何?如何度
量两者之间的这种线性关系?
二、变量的类型
在正式进行相关分析之前,先对SAS系统中关于变量的定义作一简
单介绍。
在SAS系统中,变量按类型(Type)可分为字符型(Character)和数值
型(Numeric),按测量水平(Measurement Level)又分为两种:
区间型(Interval)和名义型(Nominal)。
所谓数值型变量就是能用数字来计量的变量,而不能用数字来计量
的变量则称为字符型变量,也称为属性变量,相当于统计学中的
属性标志。例如利润、产值、成本等都可以用数值来计量,是数
值型变量,而性别、购买意向、企业类型、产品型号、广告形式
等则不能用数值计量,属于字符型变量。
所谓区间型变量是指变量的取值可以为一个连续
的数值区间。它本身又被分成了两类:一类是数值本
身有绝对的0点,如前面提到的利润、产值、成本等,
常称为比率变量,这类变量可以进行加减乘除四则运
算。另一类是数值本身没有绝对的0点,如温度,常称
为间隔变量,数值之间的间隔是有意义的,但倍数则
是无意义的。如40度比20度高20度,但不能说40度是
20度温度的2倍,因此对间隔型变量,可以进行加减乘
法运算,但不能进行除法运算,实际中常与比率变量
同等对待。
所谓名义型变量是指变量本身本质上不能用数值
表示,再测量时如果用数值表示了也只是名义上的,
并没有真正意义。这类变量也可以分为两类:一类是
变量的取值是几个没有次序之分的不同状态,通常这
些取值把总体分成了若干个不同的部分。如性别把同
学总体分成了男女两个部分;是否看过广告把消费者
分为看过和没看过两类。男、女同学也可以用数字0、
1来记,但0、1只是代表男女两类,本身没有任何大
小关系。这类变量即使用数字表示也不能进行任何加
减乘除四则运算,一般称为分类变量。
另一类变量本质上虽不能用数字表示,但它的取值
却有着明显的次序关系。如企业类型把企业分为大、中、
小三类等。这类变量其取值有内在的顺序关系。与分类
变量一样,如果用数字来记也仅表示变量的不同状态,
本身没有任何实际意义,但由于变量的取值本身有内在
的顺序,因而各个状态规定的数字应与状态本身顺序相
匹配。如大、中、小可以用1、2、3来记,也可以用9、
5、2来记,但决不可以用3、1、2来记,因为3、1、2的
顺序与大、中、小的顺序是不匹配的。这类变量一般称
为有序变量。对于有序变量,严格意义上也不能进行加
减乘除四则运算,但实际中通常做一些加法运算。如各
种比赛中去掉一个最高分和一个最低分然后平均就是这
类数据进行四则运算的一个典型。
一般来说,有序变量可以转化为分类变量,间隔
变量可以转化为有序变量,而比率变量又可转化为间
隔变量,但反之则不成立,即分类变量不能转化为有
序变量,间隔变量也转化不了比率变量。由此我们可
以把分类变量称为测量水平的最低级,而比率变量则
称为测量水平的最高级。分类变量和有序变量统称为
属性变量,有时也称为字符型变量或定性变量,而间
隔变量和比率变量则称为数值型变量,有时也称为定
量变量或连续变量。
三、相关关系的度量
由于不同类型的变量,其性质不同,可以运用加减乘
除四则运算的程度也不同,从而造成了不同类型变量
之间相关关系的度量方法也不同。
(一)定量变量
1.对于两个连续性变量常用Pearson简单相关系
数度量,其计算公式为:
rxy 
 x  x  y  y 
 x  x    y  y 
i
i
2
i
i
2
2.对于两个有序离散型变量,常用以下指标度量两者之
间的相关系数。
Spearman 等级相关系数,也称为秩序相关系数。其计
算公式为:
1
2
rs 
nn 2  1  6 d i 
C
x
 Cy 
2
nn 2  1  C x  nn 2  1  C y
其中:n为划分的等级数,di表示两种排序的等级之差,
是变量值相同等级值之和,
3
3

C

y
 yi 


C

x

x

y
i
 i i
x
是变量值相同等级值之和,当排序中不存在相同等级时,
rs
可简化为:
 n 2 
 6 d i 

rs  1   i 12
n n 1 






3. CORR(相关)过程简介
1)CORR相关过程的主要功能
CORR相关过程用于计算变量间的相关系数,包
括Pearson(皮尔逊)的积矩相关和加权乘积矩
相关,还能产生三个非参数的关联测度:
Spearman的秩序相关,Kendall的tau-b,和
Hoeffding的相关性度量D。另外,该过程也可
以计算偏相关(Spearman的偏相关, Spearman
的偏秩序相关和Kendall的tau-b) 和Cronbach
系数α及一些单变量的描述性统计量。
2)CORR相关过程的一般格式
CORR相关过程的一般格式如下:
PROC CORR <option-list>;
VAR variable-list;
WITH variable-list;
PARTIAL variable-list;
WEIGHT variable;
FREQ variable;
BY variable-list;
PROC CORR语句调用CORR过程,且是唯一必需的语句。如
果使用只有一个PROC CORR语句的相关过程,则CORR过
程计算输入数据集中所有数值变量之间的相关关系。
VAR和WITH语句用来规定要计算相关的两组变量,其它
语句是可以任选的。
3)语句说明
(1)PROC CORR语句:
其一般格式为:PROC CORR <option-list>;
该语句要求系统执行相关过程。当该语句没有选择项时,
表示该过程对输入数据集中所有数值变量计算
Pearson(皮尔逊)的乘积矩相关系数和显著性概率,
以及单变量的统计量。在该语句中,常用的选择项有
以下几类:
①数据集选项:
A.DATA=SAS-data-set(SAS数据集)——指定所要分析的
数据集。如省略,则用最近生产的SAS数据集。
B.OUTH=SAS-data-set(SAS数据集)——要求该过程创建
一个存放Hoeffding统计量的新的SAS数据集,使用该
选项须同时使用HOEFFDING选项。
C.OUTK=SAS-data-set(SAS数据集)——要求该过程创建
一个存放Kendall的tau-b统计量的新的SAS数据集,
使用该选项须同时使用KENDALL选项。
D.OUTP=SAS-data-set(SAS数据集)——要求该过程创
建一个存放Pearson(皮尔逊)系数的新的SAS数据集,
使用该选项须同时使用PEARSON选项。
E.OUTS=SAS-data-set(SAS数据集)——要求该过程创
建一个存放Spearman的秩序相关系数的新的SAS数据
集,使用该选项须同时使用SPEAMAN选项。
②有关相关类型的选项
Pearson(皮尔逊)的乘积矩相关相关系数,如果PROC
CORR语句没有规定选项,此时输出的相关系数即为
Pearson相关系数。
Speaman秩序相关系数。
Kendall的一致对等级相关系数tau-b。
Hoeffding的相关性度量D。
Cronbach可靠性系数α。
(2)VAR语句
其一般格式为:VAR variable-list;
该语句列出要计算相关系数的变量。
如:proc corr;var a b c;将计算A和B,A和C,B和C
三对变量间的相关系数。
(3)WITH语句
其一般格式为:WITH variable-list;
为了得到变量间的特殊组合的相关,该语句与VAR语句
一起使用。用VAR语句列出的变量放在输出相关阵的
上方,而用WITH语句列出的变量放在相关阵的左边。
如:
proc corr;var a b c;with x y z;该组语句意味着x,
y,z分别与a,b,c做相关分析。
(4)PARTIAL语句
其一般格式为:PARTIAL variable-list;
该语句给出计算Pearson偏相关, Spearman的偏秩序相
关和Kendall的偏tau-b 的变量名。
关于WEIGHT语句、FREQ 语句、BY 语句与前面有关过
程用法类似。
4.CORR过程应用举例
作为应用之一,我们给出例8.1中我国城镇居民家庭人
均收入和人均消费支出相关性分析程序。
data jumin;
input income expend @@;
cards;
802 685 931
828 1089 916
1261 1686 1387 1925 1554 2356
3979 3179 4283 3893 4839 3919
4332 5854 4616 6280 4953 6860
;
proc corr;
var income expend;
title '收入与消费之间相关分析';
run;
1431 1119 1568
1826 3027 2336
5160 4186 5425
5309