SAS数据集是存储在SAS逻辑库中、由SAS创建和处理的SAS文件,是SAS存储数据的主要方式。SAS数据集包含以表的观测(行)和 变量(列)为形式存在的数据值,以及用以描述变量类型、长度和创建该数据集时所使用的引擎等信息的描述信息。根据其是否包含真正的数据值,SAS数据集可分为SAS数据文件和SAS视图。SAS数据文件包含 数据和描述信息,在逻辑库中的成员类型是DATA;而SAS视图不包含 数据值,是指向其他数据源的虚数据集,成员类型是VIEW。下面分别 介绍SAS数据集的文件内容、命名,各种SAS数据文件和SAS视图,以 及它们的创建方式。

1.数据集文件

下面来具体看看上图中的各个组件。

  1. ·描述信息:描述了SAS数据集自身及其变量的属性,包括观测数、 观测长度、该数据集上次的修改日期等其他信息。其变量的描述信息包 括名称、类型、长度、输入输出格式、标签,以及是否已经为该变量建 立索引等属性。
  2. ·数据值:以矩形表的形式排列。一个数据集可包含若干个观测(也称为行),每个观测通常由一个或多个变量(也称为列)值组成。
  3. ·索引:是单独的SAS文件,可以为SAS数据文件创建索引,以提供 对指定观测的直接访问。索引文件与其数据文件有着相同的名称,但成员类型为INDEX。索引可提供对指定观测更快的访问,尤其是对较大的数据集而言。
  4. ·扩展属性:是定义在数据集或变量之上的元数据。扩展属性使用DATASETS过程创建,表示为<名称-值>对。

下面以一个简单的SAS数据集为例,来理解数据集的描述信息、观测和变量。

在SAS窗口提交如下代码生成数据集:

libname  saslib  'c:\sas\data';
data saslib.Inventory;
input Product_ID $ Instock Price;
datalines; P001R 125.00
P003T 40.00
P301M 500.00
PC02M 100.00
;
run;

使用CONTENTS过程打印数据集的属性信息,代码如下:

proc  contents  data=saslib.inventory;
run;

CONTENTS过程生成的结果如图2.3所示。其中包含了上面提到的 数据集信息、主机相关信息和变量信息等。

图2.3 数据集描述信息输出

提交PRINT过程代码,打印数据集信息。

proc print data=saslib.inventory  noobs;
run;

上面代码打印的数据集如图2.4所示。

图2.4 数据集数据值

该数据集包含4个观测,每个观测表示一种产品的各类信息。这里 有3个变量:Product_ID、Instock和Price,分别表示产品编号、库存数和价格。其中P001R、12、125等均为数据值。

2.数据集命名

命名格式:

libref.SAS-data-set.membertype

共3个组成部分,从左到右依次为逻辑库引用名、数据集名称和成员类型。在引用数据集时,通常会指定前两个,SAS会根据上下文环境,例如该数据集出现的位置或数据集的自描述信息,来确定第三个。逻辑库 引用名是与SAS数据集所在物理位置相关联的SAS逻辑库名。当创建新 数据集时,逻辑库引用名表明要将该数据集保存在哪里(位置)。当引用SAS数据集时,逻辑库引用名会告诉SAS在哪个逻辑库中找到该数据 集。

数据集名称遵守的SAS命名规则如下:

  1. ·最大长度为32字符。
  2. ·必须以字母(从A~Z,大小写均可)或下划线(_)开始。
  3. ·可以是数字、字母和下划线(_)的任意组合。

成员类型由SAS指定,例如SAS数据文件的成员类型是DATA,SAS视图的成员类型是VIEW。(一般情况下不需要去使用)

3.变量属性

SAS数据集变量的属性包括变量名、类型、长度、输出格式(format)、输入格式(informat)和标签(label)。输出格式、输入格式和标签是变量的可选属性。

每个变量的变量名必须遵守的SAS命名规范如下:

  1. ·最大长度为32字节。
  2. ·必须以字母(从A~Z,大小写均可)或下划线(_)开始。
  3. ·可以是数字、字母和下划线(_)的任意组合。 变量的类型是字符型或数字型。字符型变量可包含任何值,而数字型变量只能包含数字值(数字0~9、=、-、点(.)和科学计数法的 E)。变量类型确定了变量的缺失值如何显示。字符型变量缺失值是空 格,而数字型的变量缺失值是点(.)。

SAS以数字值存储日期和时间。默认情况下,SAS的日期值指从1960年1月1日开始的天数,SAS使用从凌晨开始的秒数存储时间值, SAS的日期时间值(datetime)指从1960年1月1日开始的秒数。该开始日期也可以通过系统变量YEARCUTOFF指定为其他值。

下面提交如下代码来生成数据集sales,并使用CONTETNS过程和PRINT过程分别打印该数据集的描述信息和数据值。

libname  saslib  'c:\sas\data';
data saslib.sales;
infile datalines dsd missover;
input Emp_ID $ Dept $ Sales Date;
format Sales COMMA10. Date yymmdd10.;
informat Date date9.;
label Emp_ID="员工ID" Dept="部门" Sales="销售数据";
label Date="销售时间";
datalines;
ET001,TSG,$,01JAN2012
ED002,,$,01FEB2012
ET004,TSG,$,02MAR2012
EC002,CSG,$,01APR2012
ED004,QSG,,01AUG2012
;
run;
proc contents data=saslib.sales;
run;
proc print data=saslib.sales noobs label;
run;

如图2.5所示为CONTENTS过程打印的部分结果,表示该数据集的变量属性,其中,Date和Sales为数值型变量,Dept和Emp_ID为字符型 变量。如图2.6所示为PRINT过程的打印结果,可以看出,Dept(部门) 的缺失值为空格,Sales(销售数据)的缺失值为点(.)。

图2.5 变量属性

图2.6 打印数据集

格式(format)会影响数据值输出的方式。SAS提供了各种字符、数字和日期时间格式。例如,为了将23000显示为23000,必须使用 COMMAw.d形式的输出格式。其中w表示最大宽度,d为小数位数。比 如,在图2.5中,Date变量的输出格式为“YYMMDD10.”,打印时该变量 的形式则为YYYY-MM-DD(例如2012-01-01)。Sales的输出格式 为“COMMA10.”,对应的数据输出形式则为10000。还可以创建并存储自定义的格式,具体在后面介绍。

format var1 comma10;

输入格式(informat)指定数据值以特定的格式读入,从而成为标 准的SAS值。在读取包含字母或其他特殊字符的数字值时必须使用输入 格式。例如,需要把输入值“$23000”读取为数字型的变量,则必须使用 输入格式DOLLARw.d才能正确读入。自定义的格式也可以用作为输入格式。SAS提供了丰富的输入输出格式用于从外部文件读取各种日期格式 和显示各种日期格式,以满足对各种日期格式的需要。在上面的示例中使用输入格式“DATE9.”读入了“01JAN2012”形式的日期,输出时使用的是输出格式“YYMMDD10.”,从而将存储的数字显示为“2012-01-01”。

informat var1 comma10;

标签通常是描述该变量的文本,最大 长度为256个字符。默认情况下,报表以变量名来标识变量,但是可以 将一个标签分配给相应的变量来显示该变量的描述信息。上例中 Emp_ID的标签为“员工编号”,Dept的标签为“部门”,Date的标签为“销 售时间”,Sales的标签为“销售数据”。在代码中可以看到PRINT过程使 用了LABEL选项,这样一来,打印的数据集表头将会使用各变量的标 签而不是变量名称。

label var1=name1 var2=name2;

4.SAS数据文件

SAS数据文件是一种在其文件中包含数据的数据集。

有两种类型的数据文件:原生SAS数据文件和接口SAS数据文件。

  1. 原生数据文件是SAS格式的文件,用来存储SAS格式的数据值和描述信 息(逻辑库是通过Base引擎定义的)。
  2. 接口数据文件是指数据以其他格式存在,并且SAS可以通过 SAS/ACCESS接口引擎访问的数据文件,例如存在于Oracle、DB2、Sybase、ERP系统中的数据文件。SAS通过SAS/ACCESS接口引擎来访问这些文件中的数据,并将这些文件当作SAS数据集处理(通过SAS/ACCESS 接口逻辑库定义的)。

使用DATA步创建SAS数据文件的语法如下:

DATA  数据集名称;
… SAS语句…;
RUN;

其中,SAS语句用于指定数据源。不同的数据源,SAS语句也不尽相同,常用的3中如下。

  1. DATELINES语句表示从程序语句中读取数据
  2. SET语句读 取指定的输入数据集
  3. INFILE语句读取指定的外部数据文件

5.SAS视图

SAS视图本身并不存储数据值,它仅包含描述信息和从其他SAS数据集或从存储为其他软件厂商文件格式的文件中获取数据所需要的信息。SAS视图的成员类型是VIEW。

可使用SQL过程、ACCESS过程或者DATA语句的VIEW选项来创建SAS视图。根据创建的方式,视图又分为SQL视图、接口SAS视图和DATA步视图。其中SQL视图和DATA步视图都称为原生视图, SAS/ACCESS视图称为接口视图。

创建DATA步视图的语法如下:

DATA  数据集名称/view=数据集名称;
… SAS语句…;
RUN;

与使用DATA步创建SAS数据文件一样,SAS语句根据数据来源的 不同会有所不同。在DATA步视图中可用的数据源可以是原始数据文 件、SAS数据文件、PROC SQL视图、SAS/ACCESS视图或其他数据库 管理系统中的数据文件。下面给出了一段创建DATA视图的示例代码, 数据源为SAS数据文件。

data  saslib.invt_vw  / view=saslib.invt_vw;
set saslib.inventory;
run;

上面代码创建了DATA步视图saslib.invt_vw,其数据来自于逻辑库saslib下的Inventory数据文件。

接口视图通过SAS/ACCESS创建,可读取第三方数据库管理系统(DBMS)的数据,例如DB2或Oracle。其实,SAS/ACCESS为这些第三方产品提供了LIBNAME引擎接口,对这些产品,建议使用LIBNAME和SAS/ACESS对应的引擎来指定SAS逻辑库到DBMS数据,这比使用ACCESS过程创建接口视图更容易,也更有效。 使用SAS视图有如下优点:

  1. ·可以节省磁盘空间,因为SAS视图不存储实际数据,仅仅存储去哪儿找到数据及数据如何格式化的指令。
  2. ·因为数据总是在执行时才从SAS视图中获取,这样能保证输入的数据集总是当前的。
  3. ·SAS视图可减少由于数据设计的改变对用户造成的影响。例如,可以改变存储在SAS视图里的查询信息而不必改变视图结果的特征。
  4. ·使用SAS/CONNECT软件,SAS视图可连接不同主机计算机上的SAS数据集,然后展示公司分布式数据的集成视图。

SAS视图可用于以下操作:输入其他DATA步或PROC步,将数据 迁移到SAS数据文件或SAS支持的数据库管理系统中,使用PROC SQL 与其他数据组合。

在选择使用SAS数据文件还是SAS视图时需要考虑以下方面:

  1. ·数据文件会使用额外的磁盘空间,而SAS视图会占用额外的处理时间。
  2. ·数据文件变量可在使用前排序和创建索引,而SAS视图在执行过程 中只能以其存在的形式处理数据。

6.特殊的数据集

还有一种特殊的数据集:_NULL_。如果想执行一个DATA步又不 想创建SAS数据集,可以指定关键字_NULL_作为数据集名称。代码如 下:

data  _null_;

SAS会执行该DATA步里面的语句但不会创建新数据集,不会有观 测或变量写入任何数据集。如果一个DATA步的输出不需要存储为数据 集,比如绘制报表,这种处理可更有效地利用计算机资源。

SAS数据集的更多相关文章

  1. SAS进阶《深入解析SAS》之Base SAS基础、读取外部数据到SAS数据集

    SAS进阶<深入解析SAS>之Base SAS基础.读取外部数据到SAS数据集 前言:在学习完<SAS编程与商业案例>后,虽然能够接手公司的基本工作,但是为了更深入的SAS学习 ...

  2. SAS学习笔记之《SAS编程与数据挖掘商业案例》(3)变量操作、观测值操作、SAS数据集管理

    SAS学习笔记之<SAS编程与数据挖掘商业案例>(3)变量操作.观测值操作.SAS数据集管理 1. SAS变量操作的常用语句 ASSIGNMENT 创建或修改变量 SUM 累加变量或表达式 ...

  3. SAS学习笔记51 SAS数据集

    结构 SAS数据集是关系型的,包含两个部分:描述部分(变量)和数据部分(观察值) 形式 SAS系统中共有两种类型的数据集: 1.SAS 数据文件(SAS datafiles) 2.SAS 数据视窗(S ...

  4. SAS学习笔记50 SAS数据集索引

    在没有索引的情况下,SAS是一条接一条的扫描观测:有索引时,直接跳到该索引对应的观测所在位置.总结一句话就是:节省时间,节省内存,提高效率 当然并不是任何情况下使用索引都能提高工作效率,因为建立索引本 ...

  5. SAS笔记(8) 利用数组重构SAS数据集

    在实际应用中,我们经常会把宽数据(一个患者一条观测)转化为长数据(一个患者多条观测)或者将长数据(一个患者多条观测)转换为宽数据(一个患者一条观测),在R中我们可以利用Reshape2包来实现.在SA ...

  6. SAS数据集推送到sql server 数据库 实现代码段

    libname fdsas ODBC datasrc=fdsas user=fdsas password=fdsas123 preserve_tab_names=yes connection=shar ...

  7. sas 数据集导出到excel

    PROC EXPORT DATA= Loan.BOM_FILENAME_2      OUTFILE= "D:\output.xls"      DBMS=EXCEL REPLAC ...

  8. SAS 数据集生成map 文件

    OPTIONS NOCENTER PS=MAX LS=MAX; LIBNAME S '.'; DATA A;    INPUT X $ @@;    CARDS;A1 A2 A3 B1 B2 B3   ...

  9. SAS︱数据索引、数据集常用操作(set、where、merge、append)

    代码部分大多来源于姚志勇老师的<SAS编程与数据挖掘商业案例>. 每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ ------------ ...

随机推荐

  1. 安装ORACLE高可用RAC集群11g执行root脚本的输出信息

    安装ORACLE高可用RAC集群11g执行root脚本的输出信息 作者:Eric 微信:loveoracle11g [root@node1 ~]# /u01/app/oraInventory/orai ...

  2. 经典笔试题型----IT经理(IT Manager)

    一般企业设置IT部门都是服务性质,虽然谈IT需要成为战略部门许多年,但用脑子想下,这概率有多少?企业存在的第一目标是:赚取利润.贸易型企业最重要的部门为销售部,生产型企业最重要的部门为销售部与生产部, ...

  3. 从神经网络到卷积神经网络(CNN)

    我们知道神经网络的结构是这样的: 那卷积神经网络跟它是什么关系呢?其实卷积神经网络依旧是层级网络,只是层的功能和形式做了变化,可以说是传统神经网络的一个改进.比如下图中就多了许多传统神经网络没有的层次 ...

  4. Java 里面各种类型之间的相互转换

    1.整形与字符型之间的数据类型转换: 一.int转换成char有两种方法: ①  是利用char的unicode编码 例:int num1 = 8; char ch1 = (char) (num1 + ...

  5. 详解vue-cli脚手架项目-package.json

    该随笔收藏自: 详解vue-cli脚手架项目-package.json package.json是npm的配置文件,里面设定了脚本以及项目依赖的库. npm run dev 这样的命令就写在packa ...

  6. oracle12 安装

    oracle    oracle orcl    orcl

  7. jdk 8 日期处理。

    ZoneId id = ZoneId.systemDefault(); LocalDateTime dateTime = LocalDateTime.now(id); System.out.print ...

  8. python class的创建

    def f(): class a(): a=5 def f2(): pass Disassembly of f: 14 0 LOAD_CONST 1 ('a') 3 LOAD_CONST 3 (()) ...

  9. Eclipse 中Git的使用及如何解决冲突

    1. 如何导入已有Git项目 1.1 File——>import… 出现以下界面 1.2 找到Git,然后双击‘Project from Git.或者点击next 1.3 双击Clone URI ...

  10. tensorflow 升级后报错:ImportError: libcudnn.so.6: cannot open shared object file: No such file or directory

    我的tensorflow之前的版本是1.2的所以支持cudnn5,但是tensorflow1.3及以上就是支持cudnn6. 查看: /usr/local/cuda/lib64$ ls  libcud ...