第一章 SAS系统简介
一. 概述
SAS (Statistical Analysis System) 是一个模块化、集成化的大型应用软件系统。它由数十个专用模块构成,功能包括数据访问、数据储存及管理、应用开发、图形处理、数据分析、报告编制、运筹学方法、计量经济学与预测等等。
SAS系统基本上可以分为四大部分:
1. SAS数据库部分
2. SAS分析核心
3. SAS开发及呈现工具
4. SAS对分布处理模式的支持极其数据仓库设计
SAS系统主要完成以数据为中心的四大任务:
1. 数据访问
2. 数据管理
3. 数据呈现
4. 数据分析
二. 基本概念
SAS系统是一个跨平台的系统,可在许多操作系统下运行,(包括DOS, WINDOWS, UNIX等),但无论在什么环境下,它都提供一个统一的运行环境。首先我们要了解一下SAS的一些基本概念。
1. SAS Data Libraries (SAS数据库)
所有的SAS文件储存于SAS数据库,这些文件包括SAS的数据集(data sets)、目录(catalogs)和程序(programs)等。或者说,SAS数据库就是这样一些文件的集合。
在有些环境中,SAS数据库就是储存在一起的一些文件,比如在WINDOWS或UNIX下,一个Library就是指在同一目录下的一组文件;而在另外一些环境中,同一个SAS数据库中的文件并不一定是储存在一起的,它们只是在逻辑上有关联。
为了访问一个数据库,你要给每个数据库设一个标记,称为libref (libraryreference),这样在SAS 的执行过程中,就用这一标记来表示这个数据库。
例如:对于一个SAS数据库,它指在一个目录 d:\hu\data1 下的一组文件,你可以给它一个名字,比如叫lib1,这个lib1就是该数据库的标记(libref)。
2. Temporary and Permanent SAS Libraries (SAS的临时和永久库)
SAS数据库分为临时库和永久库两种。临时库只有一个,标记为work,它在SAS每次启动后生成,SAS结束时库中所有数据被自动删除;其它的库均为永久库,SAS结束时不会自动删除永久库中的数据,但库标记都是临时的。SAS每次启动时会自动指定两个库标记,一个是work,另一个是sasuser,其中work是临时的,sasuser是永久的,用户可以根据自己的需要用libname命令指定其它的永久库。
3. SAS Files (SAS文件)
SAS文件是指储存在SAS数据库中的成员, SAS文件的主要类型有:
1) SAS数据集,包括DATA和VIEW
2) SAS目录,CATALOG
3) SAS程序,包括PROGRAM和ACCESS
4. Referencing SAS Files (指定SAS文件)
每个SAS文件都有一个二级名(two-level name),第一级是库标记,第二级是文件名,中间用点(.)分隔。在程序中通过指定二级名来识别SAS文件。
例如: sasuser.class 指储存在永久数据库sasuser中的SAS文件class。
而 work.mytest指储存在临时数据库work中的SAS文件mytest。
而 lib1.work指储存在用户指定的永久数据库lib1中的SAS文件work。
注意,你可以用一级名(one-level name)来表示一个临时文件,因为第一级库标记的缺省值是work。
5. SAS Data Sets (SAS数据集)
一个SAS数据集是一个SAS文件,一般它由以下两部分组成:
1)描述部分:包含该数据集的一般信息,包括
A. 数据集的名字及其成员类型
B. 数据集建立的日期和时间
C. 观测的数目
D. 变量的数目
以及数据集中每一个变量的特征信息,包括
A. 名字
B. 类型
C. 长度
D. 位置
E. 格式
F. 标记
2) 数据部分:包含该数据集中收集的数据的值,可以看作是一个矩形的表格。
表格的列(Columns)称为变量(Variables),对应于原始数据文件或其它一些外部数据库所称的阈(fields)。
表格的行(Rows)称为观测(observations),对应于原始数据文件或其它一些外部数据库所称的记录(records)或数据行(data lines)。
6. SAS Names (SAS的名字)
SAS数据集和数据集中的变量都有名字,这些名字的命名应该尽量使其能反映数据集中储存的信息的内容。对所有的SAS的名字有以下命名规则:
1)长度为1-8的字符
2) 以字母(a-z)或下划线(_)开始
3) 接以数字、字符或下划线的任意组合。
例如: month class A1_2 B _1990 B2B
均可用作SAS的名字,而
firstname 2nd Class-A
则不可用作SAS的名字。
7. Variable Type(变量的类型)
变量的类型可以分为字符型和数值型。
1)字符型变量可以包含任意字母和其它符号
2)数值型变量只能包含数值(数字0-9,+,-,.,及科学记数法中用的E)
SAS系统中对变量的遗漏数据表示为:
1)字符型变量的遗漏数据用空格表示
2)数值型变量的遗漏数据用点(.)表示
8. Variable Length andPosition(变量的长度和位置)
一个变量的长度(用于储存该变量的字节数)依赖于的的类型
1)字符型变量可以包含1到200个字符
2)数值型变量的缺省长度为8
除非另外设定其长度,数值(不管包含多少位小数)都按照浮点数储存在8个字节中。
在SAS数据集中,变量的位置由变量的顺序决定,一般来说在SAS数据集的使用中不必关心变量的位置。
9. Variable Formats(变量的格式)
变量的格式包括输入格式(informats)和输出格式(formats),它们分别影响数据读入和显示的方式,SAS系统对数值型和字符型数据提供多种输入和输出格式
1)读入包含字母和特殊符号的数值时,必须使用输入格式
例如:$1,234 à COMMA. à 1234
读入数据"$1234"中包含美元符号"$"和逗号",",利用输入格式(COMMA),得到标准的数值"1234"。
2) 当希望以特定形式显示时,要使用输出格式
例如:1234 à DOLLAR9.2 à $1,234.00
3) 关于日期的格式
例:14JAN90 àDATE7. à 10971 à MMDDYY8. à 01/14/90
10. Variable Labels(变量的标记)
每个变量还可以有一个标记,通常每个变量的含义由变量名来表达,但变量名仅限于8个字符的长度,有时候就需要设定一个标记来反映该变量更多的信息。
变量的标记可由最多40个字符的说明文字组成。
11. Characteristics of SASPrograms (SAS程序的特征)
SAS程序有两种类型的程序步(steps)组成:
数据步(DATA steps)和过程步(PROC steps)
1) 数据步(DATA steps)通常用于创建SAS数据集,但也可以用于产生特别设计的报表。
2) 过程步(PROC steps)通常用于以SAS数据集的形式分析和处理数据,但有时候也可用于创建数据集。
一个SAS程序就是由数据步、过程步或两者的任意组合而成。每一个步通常由若干语句(statements)构成。
一个SAS语句有两个重要特征:
1) 它通常由SAS关键词(keyword)开始
2) 它总是以分号";"结束
SAS程序例子:
data bankacct;
infile records;
input name $ 1-10 accttype $12-20
deposit 22-25 withdraw27-30;
proc print data=bankacct;
proc means data=bankacct mean;
var deposit withdraw;
run;
一个数据步由关键词DATA开始,而一个过程步由关键词PROC开始。
SAS语句是自由格式的,也就是说
1) 它们可以在任一列开始和结束
2) 一个语句可以由几行组成
3) 几个语句可以在同一行内
SAS语句中的词(words)之间用空格或特殊符号分隔。
12. Processing SAS Programs(SAS程序的处理)
当一个SAS程序被提交(submit)时,每一个DATA、PROC或RUN语句会导致前面的程序步被执行,所以,一个SAS程序应以RUN语句结束,否则,最后一个程序步不会被执行。
每一程序步被分别执行,执行时,SAS系统会产生一个日志(SAS log)记录执行过程中的信息和可能发生的任何错误。执行的结果根据SAS程序的不同而有所不同:
1) SAS程序经常涉及一些过程,它们会创建报表形式的输出(output)
2) 有些SAS程序的执行会创建一个窗口过程
3) 也有一些SAS程序执行诸如排序或数据处理过程,除了在日志中的记录之外,不产生可见的输出结果。
三. 显示管理系统(Display Manager)
SAS系统提供一个强有力的交互式用户界面,称为显示管理系统(Display Manager),一进入SAS就自动启动显示管理系统。显示管理系统主要由以下几个窗口组成,它们可以完成许多SAS的基本任务:
窗口名 |
完成任务 |
Program Editor |
edit and execute programming statements |
Log |
check the contents of the SAS log |
Output |
browse procedure output |
Output Manager |
manage procedure output |
Keys |
set function keys |
Help |
get help about the SAS System |
前四个为显示管理系统的四个基本窗口。
1. The PROGRAM EDITOR and LOGWindows(程序编辑窗口和日志窗口)
显示管理系统的四个基本窗口中包括程序编辑窗口和日志窗口,一进入SAS就会看到这两个窗口。
在程序编辑窗口中,你可以
1) 输入、编辑和提交程序语句
2) 打开以前储存的程序
3) 将程序存入文件
在日志窗口中,你可以看到你提交的程序执行过程中系统产生的一些信息。
2. The OUTPUT Window(输出窗口)
当你的程序产生输出结果时,输出窗口会自动显示。在输出窗口中,你可以浏览你当前的SAS程序产生的输出结果。
3. The OUTPUT MANAGER Window(输出管理窗口)
在输出管理窗口中,你可以浏览(Browse)、编辑(Edit)、删除(Delete)、储存(File store)和打印(Print)SAS的输出结果。输出管理窗口可通过以下方式打开:
Globals à Present à View output
在输出管理窗口中,对每一条输出,它会显示
1) 产生该输出的过程名
2) 起始页数
3) 长度(页数)
4) 一段描述
你可以在每一条输出显示的左边,键入B、E、F和P等命令来执行相应的操作。
4. Activating Windows(激活窗口)
激活窗口实际上是指当前你可以输入指令或进行编辑的窗口,它可以是程序编辑窗口或日志窗口等任何一个窗口。激活一个窗口的方法可以是:
1) 将光标移至该窗口,并按“ENTER”键或鼠标键
2) 输入与该窗口名相应的指令
5. Issuing Commands(发布命令)
在显示管理系统中,你可以有三种方式输入你的指令
1) 利用操作工具栏(action bar)
2) 在命令行(command line)中直接输入命令
3) 利用功能键
在某一个窗口中的输入方式可以是操作工具栏,也可以是命令行,在许多系统中通常设定操作工具栏为缺省输入方式,可通过以下方法切换为命令行方式:
Globals à Options à Command line
在命令行方式下,可通过输入“COMMAND”命令切换为操作工具栏方式。
6. Submitting a Program(提交程序)
当你在程序编辑窗口中完成程序的输入或修改以后,可以按以下方法提交你的程序:
Locals à Submit
在程序执行过程中,SAS系统在日志(LOG)窗口中记录以下信息:
1) 提交的SAS语句
2) 关于数据读入的提示信息,包括数据的位置、读入的记录数、记录的最大长度等
3) 程序运行成功的确认信息,或者不成功时的错误信息提示和警告
7. Clearing Messages(清除信息)
在SAS运行过程中,LOG窗口和OUTPUT窗口中的信息是累积的,如果你不希望保留以前运行过程中产生的LOG和OUTPUT,可以按以下方法清除这些信息:
Edit à Clear text
8. Recalling Your Program(重新调出程序)
你可以按以下方法把上次提交的程序重新装入PROGRAM EDITOR 窗口:
Locals à Recall text
用这一方法,在程序调试中可以很方便地修改错误。
9. Storing a File(储存文件)
你可以在PROGRAM EDITOR 窗口中按以下方法把程序存入外部文件:
File à Save as à ……
在LOG或OUTPUT窗口中也可以按同样方法半日志或输出结果存入外部文件。
10. KEYS Window(功能键窗口)
功能键窗口允许用户定义或改变功能键所代表的命令。要进入功能键窗口,以下两种方法均可:
1) 在命令行中输入“KEYS”即可
2) 选择 Help àKeys
功能键窗口列出了所有功能键所代表的命令,用户可以修改它们,完成之后用
File à end
退出该窗口即可。
11. HELP Window(帮助窗口)
为得到显示管理系统或SAS的有关帮助信息,可进入帮助窗口,进入方法为:
1) 在命令行中输入“HELP”, 或
2) 选择 Help à SAS System
12. Other Windows(其它窗口)
除了以上提到的这些窗口之外,显示管理系统还包括许多其它窗口,例如
窗口名 |
完成任务 |
打开方法 |
LIBNAME |
Check librefs assigned for your current SAS session |
1) 在命令行中输入“LIB”, 或“LIBNAME” 2) 选择 Globals à Access à Display libraries |
OPTIONS |
Set SAS system options |
1) 在命令行中输入“OPTIONS” 2) 选择 Globals à Options à Global options |
FILENAME |
List all current SAS file reference names |
1) 在命令行中输入“FILENAME” 2) 选择 Globals à Access à Display filenames |
13. Frequently Used Commands (常用命令)
显示管理系统提供了许多命令,以下是一些非常常用的命令:
BYE |
推出SAS |
CLEAR window-name |
清除指定窗口中的内容 |
END |
退出当前窗口 |
FILE 'filename' |
储存到指定文件 |
HELP |
打开帮助窗口 |
INCLUDE 'filename' |
引入指定文件 |
KEYS |
打开功能键窗口 |
LIBNAME |
确认SAS数据库内容 |
LOG |
进入LOG窗口 |
NUMS |
打开或关闭程序编辑器的数字区 |
OPTIONS |
进入OPTIONS窗口 |
OUTPUT |
进入OUTPUT窗口 |
PRAGRAM |
进入PROGRAM EDITOR窗口 |
RECALL |
调出上次提交的程序 |
SUBMIT |
提交程序 |
四. SAS程序的调试
上面我们了解了如何提交一个SAS程序,解释了运行过程产生的LOG和OUTPUT,并且知道了如何保存你的SAS程序。下面,我们要讨论当你的SAS程序中存在错误时,你应该如何找到这些错误并进行修正,也就是说,如何来对你的SAS程序进行调试。
1. Including a Stored Program(引入一个已储存的文件)
如果你想要调试的SAS程序原来已经储存在外部文件中,那么你可以在程序编辑器中选择
File à Open
然后找到你需要的文件,确认后,该文件就被调入程序编辑器中。这跟你直接在程序编辑器中输入是一样的,只是比起每次重复输入要简单得多。
接下来,你就可以对程序编辑器中SAS程序进行修改,或将它提交SAS系统运行了。
2. Syntax Errors(句法错误)
当你把一个SAS程序提交后,你希望它能正确运行,并显示出你希望看到的结果,但有时候,由于你的疏忽或其他某种原因,你的SAS程序中存在一些错误,导致它不能正确运行。这时,你就需要找到错误并改正它。`在SAS程序中,最常见的,也是最容易发现的一类错误是句法错误,句法错误大致包括
1) 关键词拼写错误
2) 语句末的分号遗漏
3) 设定无效选项(invalid options)
4) 遗漏必要的语句
当SAS在运行过程中发现句法错误时,它会在 LOG窗口中显示“ERROR”,并指出错误发生的位置以及可能的原因。因此,当你的SAS程序没有按照你的期望正确运行的话,你就应当到LOG窗口中寻找可能产生错误的原因,并设法修正它。
句法错误通常会导致错误所在的程序步停止运行。
3. Text Editor Commands(文本编辑器命令)
为了修正或修改你的SAS程序,你可以使用“RECALL”命令将刚才提交的SAS程序调回程序编辑器,然后用文本编辑器命令来进行编辑。
文本编辑器命令可以让你删除(delete)、插入(insert)、移动(move)、复制(copy)和重复输入(repeat)文本,这些命令必须在程序编辑器的行数区(line numberarea)输入。如果在你的程序编辑器中没有显示行数,你可以输入“numbers”或“nums”命令,或选择“EditàOptionsàNumbers”来打开程序编辑器的行数区。
下面列出这些文本编辑器命令
命令 |
功能 |
Cn |
复制(copy) n行 |
Dn |
删除(delete) n行 |
In |
插入(insert) n行 |
Mn |
移动(move) n行 |
CC |
复制(copy)块(block of lines) |
DD |
删除(delete) (block of lines)块 |
MM |
移动(move) (block of lines)块 |
A |
之后(与C,CC,I,M及MM配合使用) |
B |
之前(与C,CC,I,M及MM配合使用) |
下面举几个例子说明如何使用这些文本编辑器命令:
1) 删除第三行:
将光标移至行数区第三行,按“D”, 然后按“ENTER”即可。
2) 删除第三至第七行:
将光标移至行数区第三行,按“D5”, 然后按“ENTER”即可。
或者:
将光标移至行数区第三行,按“DD”, 然后将光标移至行数区第七行,按“DD”,最后,按“ENTER”即可。
3) 在第三行前插入一行:
将光标移至行数区第三行,按“IB”, 然后按“ENTER”即可。
或者:
将光标移至行数区第二行,按“I”, 然后按“ENTER”即可。
4) 在第三行后插入四行:
将光标移至行数区第三行,按“I4”或“IA4”, 然后按“ENTER”即可。
或者:
将光标移至行数区第四行,按“IB4”, 然后按“ENTER”即可。
5) 将第三行至第五行移至第七行后
将光标移至行数区第三行,按“M3”, 然后将光标移至行数区第七行,按“A”,最后,按“ENTER”即可。
或者:
将光标移至行数区第三行,按“MM”, 然后将光标移至行数区第五行,按“MM”,再将光标移至行数区第八行,按“B”,最后,按“ENTER”即可。
6) 将第三行至第五行复制至第七行后
将光标移至行数区第三行,按“C3”, 然后将光标移至行数区第八行,按“B”,最后,按“ENTER”即可。
或者:
将光标移至行数区第三行,按“CC”, 然后将光标移至行数区第五行,按“CC”,再将光标移至行数区第七行,按“A”,最后,按“ENTER”即可。
4. Clearing Contents(清除内容)
在程序调试过程中,你可能需要清除某些窗口中的内容,以便更清楚地看到最近一次执行过程中显示的信息。为清除某窗口中的内容,你可以在该窗口中选择:
Edit à Clear text
或者,在命令行中输入命令:
clearrecall 清除recall缓存中的内容
clearpgm 清除程序编辑器中的内容
clearlog 清除LOG窗口中的内容
clearout 清除OUTPUT窗口中的内容
5. Replacing a Stored File(替换一个已储存的文件)
当你完成程序的调试或调试到一半想要暂停时,你可能希望将你的程序保存下来,以后可以再用。为此,你可以在程序编辑器窗口中选择:
Fileà Saveas
会出现一个对话框,输入你想要存为的文件名,或直接在对话框中选择已有的文件名,按“OK”即可。若该外部文件已经存在,系统会提示你,是替换(Replace)、附加(Append)还是取消(Cancel),可根据你的实际情况选择。
五. 练习
1. 打开SAS,熟悉显示管理系统界面。
2. 试验在操作工具栏和命令行两种方式之间切换。
3. 试验在不同的窗口之间切换。
4. 进入帮助窗口,浏览系统的帮助信息。
5. 进入功能键窗口,了解各功能键的作用。
6. 试验在程序编辑器中输入程序。
7. 试验在程序编辑器中用文本编辑命令修改程序。