第二章 导入数据到SAS | 逻辑库和SAS数据集
目录
2.6 逻辑库和SAS数据集
2.6.1 临时和永久数据集
SAS数据集有临时和永久两种存在方式
SAS数据集名称
所有的SAS数据集都有一个两级名称,两个层级之间用句点.分隔。
- 第一层级:逻辑库引用名
- 第二层级:数据集名称
注意,两级名称出现在 DATA 语句和 DATA= 选项中
逻辑库引用名、数据集名称都遵循SAS命名的标准规则:以字母或下划线开始,且只包含数字、字母或下划线。此外,逻辑库引用名长度不超过8个字符,数据集名称不超过32个字符。
临时SAS数据集
没有声明逻辑库引用名的数据集,都是临时数据集,默认保存在 WORK 逻辑库中,会话结束时,会被SAS删除。
永久SAS数据集
创建永久SAS数据集,需要使用逻辑库引用名。而使用之前需要先进行定义,可以使用新建逻辑库 或 LIBNAME语句进行定义。
示例:libname zdata "C:\user\datafile" ;
2.6.2 通过LIBNAME语句使用永久SAS数据集(libname)
LIBNAME语句定义逻辑库引用名,是SAS中创建逻辑库最常见的方法。其基本形式如下:
libname 逻辑库名称 ‘逻辑库保存路径‘ ;
注意,在不同系统操作环境下,路径会有所不同。
创建永久SAS数据集
libname zdata 'D:\data'; /* 1.创建逻辑库引用名zdata */ data zdata.plants; /* 3.存储读取的数据到命名为plants的永久数据集中 */ infile 'D:\data\sas_file\test.dat'; /* 2.从名为test的文件中读取原始数据 */
上面这段程序,运行逻辑是先1,再2,最后3。、
读取永久SAS数据集
要使用永久SAS数据集,可以在程序中包含一条LIBNAME语句,并通过两级名称引用它。
示例:
libname zdata1 'D:\data'; /* 引用名可以不一样,但路径必须一致 */ proc print data = zdata1.plants; /* 引用时,数据集名称是唯一标识,不能更改 */ title "常见植物数据表"; run;
2.6.3 通过直接引用使用永久SAS数据集(‘路径+名称‘)
SAS也可以不建立逻辑库引用名和定义SAS逻辑库,直接引用永久SAS数据集,但「不推荐」此用法。
直接创建永久SAS数据集
只需要把数据集的名称和路径放在要使用该数据的引号之内,即可直接创建永久SAS数据集。
data "D:\data\sas_file\test.dat"; /* windows操作环境 */ data "/home/rds/zdata/app.dat"; /* unix操作环境 */
直接引用永久SAS数据集
只需要在要使用该数据的地方,将该数据集的路径和名称包含在引号中即可。
proc print data = "D:\data\sas_file\test.dat";
2.6.4 列出SAS数据集中的内容(contents)
SAS存储数据集,除了存储数据本身以外,还会存储有关该数据集的一些其他信息(也被称为描述符部分),可以使用 CONTENTS 过程查看这部分信息,只需要在 data= 选项后面指定数据集即可。
语法:proc contents data = data-set ;
*创建逻辑库; libname zdata "D:\data\sas_file"; *data步创建一个数据集; data zdata.funnies (label = 'comics character data'); /*'label='选项,给数据集加标签*/ input id name $ height weight dob mmddyy8. @@; label id = 'identification no.' /*'label'语句,给变量加标签*/ height = 'height in inches' weight = 'weight in pounds' dob = 'data of birth'; informat dob mmddyy8.; /*格式化输入*/ format dob worddate18.; /*格式化输出*/ datalines; 53 susie 42 41 07-11-81 54 charlie 46 55 10-26-54 55 calvin 40 35 01-10-81 56 lucy 46 52 01-13-55 ; run; *使用proc contents过程描述数据集; proc contents data = zdata.funnies; run;
注意,给数据集或者变量加标签时,标签长度不能超过256个字符。加标签的目的,是记录下更多信息。此外,data步和proc步都可以为数据添加标签,但适用范围有区别:
- data步加label:描述信息储存在数据集中,打印会显示
- proc步加label:标签只在process中使用,打印不会显示
上面程序还包含了 informat 和 foamat 语句,两者可以用来为变量关联输出格式和输出格式。
- informat 语句:格式化输入
- foamat 语句:格式化输出
这两种语句对数据起作用的存储逻辑和上面一样,data步若指定了informat 和 foamat 语句,则指定的输入格式和输出格式会被存储到数据集中,打印会显示。反之,proc步的则适用于proc过程中,打印不显示。
最后,proc contents的输出是三张表,分别描述了数据集信息、每个变量信息:
关于该数据集 | 关于每个变量 |
---|---|
数据集名称 | 类型(数值或者字符) |
观测数 | 长度(以字节为单位的存储大小) |
变量数 | 用于打印的输出格式(如果有的话) |
创建日期 | 用于输入的输入格式(如果有的话) |
数据集标签(如果有的话) | 变量标签(如果有的话) |