SAS程序基本语法入门
第一节SAS系统对数据的管理
在SAS系统中只有SAS数据集才能被SAS过程直接调用,SAS数据集的结构和DBF数据库完全相同,因此无须多讲。而SAS数据集存储在被称为SAS数据库的文件集中,在PC系统中,SAS数据库与某一个文件夹相对应,我们要为每一个数据库指定一个库标记(库名)来识别该库,使用Libname命令可以指定库标记。它的一般格式如下:
Libname 库标记’文件夹位置’选项;
1
例如要指定目录“C:\USER”为库标记A,可以在视窗中提交如下语句:
libname a ’c:\user’;
假设在C盘的目录下,有一个文件夹“user”,该文件夹中有一个SAS数据集为aa。下面的一段程序为可以将aa调出,并打印。
libname a ’c:\user’;
proc print data=a.aa;
run;
2
数据库可分为永久库和临时库两种。临时库只有1个,名为WORK,它在每次启动SAS系统后自动生成,关闭SAS时库中的数据集被自动删除;永久库可有多个,用户可以使用Libname语句指定永久库的库标记,永久库中的所有文件都将被保留。但库标记仍是临时的,每次启动SAS 系统后都要重新指定。不过为了方便用户,SAS在每次启动时都会自动指定两个库标记:
SASUSER:指明为永久库,即库中的数据集被保存起来,以便下次启动系统时使用。
3
WORK:指明为临时库,对于开发和检查新程序非常有用,但每次SAS运行结束后WORK库中的所有文件将被删除。在程序中引用该库中的数据集可以省略库标记,即它被认为是缺省的数据库。
SAS数据库对应文件夹,如SASUSER对应c:\sas\sasuser,WORK 对应c:\sas\saswork, SAS数据集则对应文件,每个数据集实际上是在硬盘的相应文件夹内产生一个文件名为数据集名,而扩展名为.sd2的文件,因此如果你成功的建立了一个数据集,理论上你就可以反复使用它直到硬盘报废。
4
每一个数据集都有一个两级名,第一级是库标记,第二级是数据集名,中间用“.”隔开,在程序中通过指定两级名来识别文件。文件两级名的一般形式如下:
库标记.数据集名
如在a库中的数据集abc可以这样来引用:a.abc。
如果要对数据abc进行分析,例如
Proc means data=a.abc;
Var x1 x2;
5
Run;
第二节SAS程序的数据步
一、预备知识
SAS程序的语句从上一个语句结束处开始,以一个分号结束,可占多行。
二、数据步
以DATA语句开始,用于创建和处理数据集。其中最常用的语句有:
DATA语句它的主要功能是:
6
o标志数据步的开始。
o命名将要创建的SAS数据集。
DATA语句的一般形式如下:
DATA数据集名;
INFILE语句用于从外部文件读入数据,必须出现在INPUT语句之前。它的主要功能是:
确定一个包含原始数据的外部文本文件。
INFILE语句的格式如下:
7
INFILE’外部文件的所在位置及名称’选项;
?CARDS语句用于直接输入数据,标志着数据块的开始。格式如下:
CARDS;
数据块
;
?INPUT语句用于向系统表明如何读入每一条记录。它的主要功能有:
8
o读入由语句指定的数据列。
o为相应的数据域定义变量名。
o确定变量的读入模式。
INPUT语句的格式如下:
INPUT变量名 [变量类型起止列数]...;
方括号表示其中的内容为可选,如果不输入,系统会以默认值代替。
三、数据的两种输入方式
9
上面我们学到了INFILE语句和CARDS语句,它们分别对应了两种数据输入的方式:
【直接输入方式】
实际上我们在第一章已经用到了直接输入方式,仍以那个程序为例,其中的数据步如下:
data temp;命名将要建立的数据集为
work.temp
input x y@@;要输入的变量为x、y,并且连续
10
输入
cards;直接输入数据,数据块开始
34 56 78 90 35 67 89 10 23 65 77
数据块
45
;数据块结束
变量y后面的@@表示数据可以在一行里连续读入,SAS默认按列来分隔变量,可是这里只有两个变量,输成两列数据太长,因此加上两个@@,SAS见到这个符号,在按变量名依次读取完数据后,不是跳到下一行,而是继续在该行读数据,直至本行结束或到达分号为止。
11
12 如果你对这段叙述无法理解,请去掉两个@@,重新运行一遍程序,看看LOG 视窗中的提示都有些什么变化。
【外部文件读入方式】
如果刚才的数据已经事先输好,在硬盘上的“C:\USER ”文件夹内存为temp.dat 文件,该文件内容如下(纯文本):
34 56 78 90 35 67 89 10 23 65 77 45
则我们可以输入程序如下:
data temp;命名将要建立的数据集为work.temp Infile ’c:\user\temp.dat’;指定外部数据文本文件名
input x y@@;要输入的变量为x、y,并且连续输入Run;数据步结束,以上语句可以执行了
数据步以DATA语句开始,那么在哪里结束?在遇到run语句或另一个数据步/程序步时就结束了。
【读入其他格式的数据文件】
除了以上的两种通过数据步创建数据集的方法,SAS还提供了一些
其他的方式可以用来读入其他格式的数据文件。6.11版本以上的SAS
13
可以利用FILE菜单上的import命令将其他格式的数据文件导入SAS系统,创建SAS自己的数据集。可以导入的数据文件格式有:dBase数据库,EXCEL工作表,LOTUS的数据库,纯文本的数据文件等。
导入的操作完全是对话式的,界面友好,简便实用。以下简单叙述导入的步骤,假如例1.1的数据输成一个dBASEIII数据库文件temp.dbf, 已经存放在"c:\user"下,要导入成数据集work.li1_1。选择FILE菜单上的import,弹出一个对话框,按照向导的提示进行下去。
14
15
1. 选择导入的数据格式,从下拉式菜单上选择DBF格式,单击NEXT 按钮。
2. 给出数据文件的位置和文件名,在对话框中键入
C:\USER\temp.DBF,或点BROWSE直接从上面选择文件,选好后单击NEXT按钮。
3. 选择导入的目的地,即指定要创建的数据集的名字和存放的数据库名,先在左面的对话框选择数据库名WORK(临时库),在右面的对话框键入数据集的名字li1_1,此名可任意起,少于8个字符,选择完后,单击FINISH按钮,就完成了此次操作。
16
这时已经建好了一个数据集,名为WORK.li1_1,与我们前面建立的数据集完全一致。
第三节SAS程序的程序步
通俗的讲,SAS的程序步(有的书中也称过程或过程步)就是已经编好了的用于数据整理和统计的计算机程序,你只需要调用它们就是了。程序步总是用一个PROC语句开始,后面紧跟着程序步名,用以区分不同的程序步。以下是一些常用的程序步的名称及功能。
17
18
PROC就是程序(procedure)的缩写,而程序步的名字大都是其功能相对应的单词或词组的缩写。
可见SAS的许多功能就是通过程序步来体现的,可如此多的种类也使我们难以总结出一个程序步的通式来。不过仍可大致给出如下结构:
PROC过程名[DATA=数据集名] [选项];
该过程的专用语句描述;
[VAR 变量序列;]
19
[WHERE 条件表达式...;]
[BY 变量序列;]
Run;
方括号里的语句均可以省略,在这时该过程按最通常的情况来处理,即:
o处理最新建立的SAS数据集。
o处理所有的变量(或对一个计算过程来说处理全部数值变量)。
o一次处理整个数据集而不是某个子集。
我们在第一章中用到的PRINT程序步就是采用的这种默认方式。
20