第二章 导入数据到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的输出是三张表,分别描述了数据集信息、每个变量信息:

关于该数据集关于每个变量
数据集名称类型(数值或者字符)
观测数长度(以字节为单位的存储大小)
变量数用于打印的输出格式(如果有的话)
创建日期用于输入的输入格式(如果有的话)
数据集标签(如果有的话)变量标签(如果有的话)