当前位置:文档之家› SAS讲义1-3

SAS讲义1-3

第三章:对SAS 数据文件的合并与存取本章主要内容,是介绍SAS 软件对整个数据文件的存取及合并的方法,而上一章则主要是介绍对一个数据文件内变量的读取及处理方法。

我们先讲一讲如何用SAS 指令合并两个或多个数据文件。

一、 S AS 软件对两个及以上数据文件的合并在数据分析时,将两个不同的数据文件并为一个,以进行进一步的综合研究,有时是很必要的。

SAS 软件有两种合并两个数据文件的方法。

1、 垂直合并:垂直合并的方法,适用于已经用DA TA 类指令建立起的两个或多个SAS 数据文件,这些数据文件必须具有完全相同的变量(名称及内容),换句话说,两个数据矩阵应具有相同的列数。

这种合并是在一个新的DA TA 阶段里,通过“垂直合并表格指令”SET 来实现的。

合并后,一个表格接在另一个表格之下.........。

下面是一个这类合并的图例:我们有两张分别叫作“Table 1”和“Table 2”的SAS 表格,如下图:Table 1 Table 2 obs v1 v2 obs v1 v2可为地址,人名 观测单位用DA TA 类指令建立合并这两张表的程式可如下编写:在程式运行后,我们可以得到一个新的叫作Table3的SAS表格,这张新表包含有名叫Table1与Table 2的两张SAS数据表,是这两张表的垂直合并。

其形式如下图(Table2被接在表Table1之下):Table3如果被合并的表格(如上例Table1、Table2)并没有完全一样的结构,或者说没有一样的变量,合并指令仍会执行,所有有问题的数据在新的合并表中,将会以残缺数据符号“·”代替。

2、水平合并:与“垂直合并”一样,水平合并也是将已经建立好的两个或多个SAS数据文件,合并成一个新的数据文件,供数据分析之用。

被合并的数据文件,必须具有完全相同的观测单位。

或者说,两个数据矩阵的“行数”要完全相同,在合并前...,两个矩阵各自的第一列的元素也应当完全相同。

水平合并后,一个SAS数据文件与另一个SAS数据文件并列(并排)生成为一个新的SAS数据文件。

为了保证不同数据矩阵的每一行都相互对应,或者说两个不同数据矩阵的第一列相同元素互相对应,在两个数据文件合并之前,比较稳妥的作法是先用两个即将合并文件的“公共标志符”进行分类。

由于“水平合并”要求两个数据矩阵的“行数”完全相同,两个矩阵合并前各自第一列的元素也完全相等。

事实上,就是要求两个即将合并的原始数据矩阵的观测单位要完全等同。

因此,两个矩阵相互等同的观测单位即成为它们合并的“公共标志符”,我们可以利用SAS软件的分类指令(PROC SORT),在“水平合并”指令发出之前,先将两个数据矩阵各自用“分类指令”按相同的“公共标志符”——观测单位——进行分类排列;然后再用“水平合并指令”MERGE,将两个数据矩阵按它们的“公共标志符”——观测单位——加以合并。

由于“分类指令”PROC SORT与“水平合并指令”MERGE都需要使用“公共标志符”,所以在程式的编写时,还需要使用SAS软件的“控制公共标志符指令”BY。

下面是两个数据矩阵水平合并的实例与图例:我们有两个SAS数据文件LISTE1和;LISTE2:LISTE1 LISTE2欲水平合并之将其用DA TA指令分别建立成SAS数据表,并用分类指令和控制指令分类排列;最后将两个数据文件水平合并的程式可如下表示:DA TA LISTE1;…PROC SORT;BY NO;按变量NO分类排列;DA TA LISTE2;…PROC SORT;BY NO;DA TA LISTE3;MERGE LISTE1 LISTE2;BY NO ;我们通过水平合并,最后得到了一个叫作LISTE3 的SAS 数据文件,这一文件是两个数据文件LISTE1与LISTE2的水平合并,其图示如下:SAS 数据文件名LISTE3变量名 NO A B x y如果合并前的两个数据矩阵的“行数”不是完全相同,或者说有的数据文件缺漏了对一些观测单位变量的登记,在水平合并以后,有缺陷的不对应数据会被SAS 的数据残缺符号“·”所代替。

从以上SAS 软件对两个或多个数据文件的合并可以看出,无论是在数据库的管理,或是在原始数据的录入方面,这些专用指令的灵活运用是很实用的,可以为用户提供很多方便,显示出SAS 软件灵活性,实用性的一面。

当工作的数据库过于庞大时,使用这些指令并配合其他DA TA 指令,可以完成被称为“数据采掘”的工作,大大提高计算机工作的效率。

下面,我们介绍SAS 程式对原始数据文件的不同读取方法。

二、 SAS 程式对原始数据文件的存取1、 在SAS 程式内直接插进原始数据矩阵的方法:将原始数据矩阵和SAS 指令一同写进一个SAS 程式是可以的。

其规则是,①原始数据矩阵必须写在DA TA 阶段指令的最后面,放置在“原始数据输入指令”CARDS (属DA TA 类指令)和第一个子程式指令PROC 之间;②数据矩阵与两条指令CARDS 和PROC 之间,不能留有空行;③输入原始数据矩阵的最后一个数据后,不能再加分号“;”。

下面是一个例子:DA TA class ;INPUT name x y z ;; Qian 28 1 5Sun 25 1 6FREQ ;RUN ;2.对程式外的一个SAS 数据文件的读取:当数据文件的观测单位很多时,例如有数百个以上的观测单位,将原始数据矩阵单独以一个数据文件的形式建立并存贮起来是更为常用的简便方法。

其好处是显而易见的,既有利于SAS 程式的编写,修改及运行,也有利于保护原始数据,不被意外的人为错误所损坏。

这样,用户实际上是在两个相互独立的SAS 文件上工作,一个是存盘的SAS 原始数据文件,另一种是SAS 程式文件。

因此,在SAS 程式文件上,必须标注出SAS 数据文件的名称和所存贮的位置。

在不同型号的计算机上,和不同的计算机操作系统下(如VM/CMS ,UNIX 系统;DOS 系统及Windows 系统),标注的指令或句法是不同的。

由于在Windows 系统下使用SAS 软件是当前的主流趋势,我们在这里仅向大家介绍在这种系统下,对数据文件的读取指令。

对数据文件的读取指令是INFILE ,这一指令的后面要注明原始数据文件所处在的确切位置,并要用引号把数据文件的名称,文件类型和其位置括起来。

这条指令必须放在DA TA 阶段的关键词DA TA 之后,和变量输入指令INPUT 之前。

下面是在 Windows 操作系统下,这一指令的一个实例(在DOS 操作系统下,也同样可以适用):DA TA class ;INFILE “A :\ table. DA T ”; 或“A :\wp02-98.dat ”;INPUT ……;这段程式的涵义是,用DA TA 指令建立一个名叫“class ”的SAS 数据表,这个数据表要首先读取存在“A ”驱动器上软盘内的名叫table 的原始数据文件(DA T 是这一文件的类型);此后,需从这一数据文件上输入(读取)变量……(依靠INPUT 指令)。

*选修* :3、用SAS 程式建立并输出一个外部数据文件对于其它的计算机软件来说,用“SAS格式化”了的数据文件是不能被取读的。

当我们需要一个未经专门格式化的原始数据文件,或者是为另一个计算机软件(比如EXCEL 或SPSS)取读用的专门数据文件,就必须把SAS 数据文件转换为一个“外部数据文件”。

这种转换的SAS指令是由“文件输出指令”FILE,以及“文件(存写)格式化指令”PUT所组成的,这两条指令应写在DA TA阶段程式的结尾处。

“文件输出指令”FILE是用来定义输出的数据文件名,文件类型,以及文件存贮的位置的(硬盘或软盘)。

与文件输入指令INFILE一样,不同的计算机操作系统下,这条指令的句法是不一样的。

下面是在DOS操作系统下和Windows操作系统下这条指令的一般表达式与一个应用实例:FILE “外部数据文件名”;(一般表达式)FILE “B:\ export.dat”;(应用实例)应当注意的是,输出的数据文件名及存贮位置(如上例:B:\export.dat)必须要用引导括起来,而且是由用户自己去定义的。

“文件格式化指令”PUT是专门用来定义数据库变量名清单以及变量的存写格式的。

其一般表达式为:PUT (变量名清单)(变量的存写格式);“变量名清单”和“变量的存写格式”的书写规则与变量在“固定格式”下的读取规则完全相同(参第二章:一:2)。

如:PUT (V1-V10)(10*2.)。

上例表明,输出的数据文件共有从V1到V10十个变量,每一个变量的数值各占两列的空间。

三、SAS软件对残缺数据的存取作为SAS软件的书写规则,在一个数据文件里,当数字变量的变量值用符号“.”表示时,和字符串变量的变量值用一个“空格”表示时,即表明该变量值是“残缺数据”(如调查登记时的“拒答”,或某一观测单位里缺乏的变量——如1982年我国人口普查时,西藏的1982年分年龄死亡人口没有登记)。

如果变量在编码时,对残缺数据的编码是用其它的方式,比如是用许多教科书建议的“0”或“9”来代表残缺数据的编码,那么在使用SAS软件做数据分析时,就必须要在SAS程式里对这些变量重新编码。

使其与SAS软件对此的特定规则相一致。

重新编码的工作,在SAS程式里可以用条件语句指令IF…THEN来完成。

例如:IF V1=9 THEN V1=.;IF V3>50 THEN V3= .;IF name =“9”THEN name =“”;可以看出,这里V1和V3是数字变量,变量name是字符串变量。

经过条件语句指令的处理,用“9”表示的V1变量,用“50”以上的数字表示的V3变量,以及用“9”表示的变量name ,都再次按SAS软件的规则被重新编码为残缺数据。

这一章,我们介绍了对SAS数据文件的合并与存取,以及对一个数据文件中,残缺数据的存取方法。

下一章,我们将介绍SAS软件对变量的数据处理方法。

相关主题