
2.3 定义SAS数据集
如果你是一名数据分析的新手,当拿到一些以SAS格式存储的数据集时,应该从哪些方面去了解这些数据,以便为下一步的数据分析做好准备呢?
在进一步分析数据之前,我们还需要了解数据集的基本信息,比如修改日期、属性、标签等,以及每个字段的含义、类型、长度、格式等。
2.3.1 SAS数据的相关概念
SAS对表的引用采用二级引用,即“逻辑库名.文件名”,比如为了引用SASHELP库中的CLASS文件,必须采用“SASHELP.CLASS”格式,若不加逻辑库名,则默认为调用WORK库中的相应文件。对于这些SAS操作中的默认规则,初学者会不知所措。本节旨在解决这个问题。
1. SAS文件
所有的SAS文件都必须作为某个SAS数据库的成员。SAS文件主要分为以下三类。
- 表:存放数据值和数据的描述信息的数据集,以.sas7bdata为扩展名。
- 数据视图:不实际存放数据,只包含表的描述信息和一组用来读取数据的查询语句,以.sas7bvew为扩展名。
- 目录:存放不同种类的信息文件,一般每个信息文件都比较小,比如一些系统的快捷键的定义等,以.sas7bcat为扩展名。
2. 数据集构成
一个数据集包括两个组成部分——描述部分和数据部分,如图2-9和图2-10所示。

图2-9 数据集组成部分

图2-10 数据部分和描述部分
数据部分是打开逻辑库中的文件时展现在我们眼前的部分,是数据值的集合。描述部分即属性,包含以下部分。
1)数据集的名称。
2)创建数据集的日期和时间,如图2-11所示。

图2-11 ACCOUNTS属性
3)观测的个数,变量的个数。数据集中的每一个变量都有属性,如图2-12所示。

图2-12 变量属性示例
类型、名称、标签、长度、输入格式、输出格式等属性如图2-13所示。

图2-13 ACCOUNTS属性选择
- 数据集与变量命名规则:首字符必须为英文字母(A~Z,包括大写和小写)或下划线(_);由数字、字母和下划线组成;最多不超过32个字符;不区分大小写。
- 标签:数据集的属性除名称外,还包括标签,以便描述数据集存储数据的特性。书写规则:可以是中文、英文字母等任何符号,最长不超过256个字符。
- 类型:只有字符型和数值型两种类型,一个变量只能属于其中一种类型。数值型变量只能是合法的数值,缺失值为点“.”,注意不含引号。日期属于数值型变量,取整数。日期又分为日期数据与日期时间数据。日期的常数值表示形式为ddmmmyy d或者ddmmmyyyy d,比如表示2014年6月30日时,可以采用30jun14d或30jun2014d表示。日期数据在SAS中的存储和展示方式如图2-14所示。

图2-14 日期数据在SAS中的存储和展示方式
日期时间数据如1960年1月1日00:00:00,每加1代表增加1秒。日期时间数据在SAS中的存储和展示方式如图2-15所示。

图2-15 日期时间数据在SAS中的存储和展示方式
字符型变量的值可以是任何字符串,如中国、Alex等。缺失值为空格,不含引号。
- 变量属性——输入格式(Informat)及输出格式(Format):输入属性用于确定数据如何读入SAS数据集;输出属性用于确定数据如何显示,即打开数据集我们看到的格式,它只是输出形式,不影响存储形式。
3. SAS EG数据视图
SAS EG数据视图是从其他文件中读取数据的一种SAS文件。它只包括数据集的描述信息,如数据类型、变量长度等。SAS EG数据视图类似于数据库视图。
SAS EG数据视图主要有以下几个优势。
- 可以通过连接多个表的视图来合并数据集;
- 可以节省大量空间;
- 可以保证读取的数据集永远都是最新的;
- 更改一个数据视图只需要改变这个视图的查询语句。
2.3.2 SAS EG实现方式
1)单击菜单,按顺序依次单击“任务→数据→数据集属性”,如图2-16所示。这里可以点击“添加”按钮新增数据集,也可以选中数据集并删除它。

图2-16 数据集属性菜单
2)单击“下一步”按钮,设置输出选项。默认报表输出内容包括数据集的创建日期、上次修改日期、观测数、编码、任何与引擎/主机有关的信息,以及变量及其属性按字母顺序排列的列表。增强型报表输出包括表类型、表的创建和修改日期、观测数、变量标签以及变量类型。排序可以按照变量名称、表中变量顺序、变量类型、变量格式、变量标签中的五者之一进行升序或者降序排列,如图2-17所示。

图2-17 输出数据集
上述选项设置之后,单击“完成”按钮,结果中产生5类信息。
1)数据集信息,如数据集名称、类型、观测数、变量数、创建时间、修改时间、是否排序、是否压缩。
2)引擎和主机相关的信息,如页面大小、页数、版本。
3)按字母顺序排序的变量和属性列表,如变量名称、类型、长度、输入格式、输出格式、标签等。
4)数据集信息,与第1类显示信息基本相同,但较为简洁。
5)变量列表信息,与第3类显示信息基本相同,但较为简洁。
其中,默认报表输出的是前3类信息,增强型报表输出的是后2类信息。
2.3.3 SAS程序实现方式
1. 查看文件属性信息
基本语法如下:
proc contents <options>; run;
options语法解读如表2-1所示。
表2-1 options语法解读

2. 创建视图
1)数据步视图:包含从多个数据源中读取数据的数据步程序。
定义格式:DATA数据集名称/view=数据集名称。
上面的定义中,在数据步的最后一个数据集名称后加上“view=数据集名称”是告诉SAS程序只进行编译,不运行,而被编译的程序存储在view后的数据视图中。
例如下面这段创建数据步视图的代码:
data bankdata.account1/view= bankdata.account1; set bankdata.account; run;
2)SQL视图:一个带有名称的proc sql查询,可以读写的数据源同数据步视图。
proc sql; create view bankdata.account as select * from bankdata.account; quit;