系统和数据分析建立SAS系统的数据集DATASTEP.docx
- 文档编号:26645798
- 上传时间:2023-06-21
- 格式:DOCX
- 页数:17
- 大小:287.54KB
系统和数据分析建立SAS系统的数据集DATASTEP.docx
《系统和数据分析建立SAS系统的数据集DATASTEP.docx》由会员分享,可在线阅读,更多相关《系统和数据分析建立SAS系统的数据集DATASTEP.docx(17页珍藏版)》请在冰豆网上搜索。
系统和数据分析建立SAS系统的数据集DATASTEP
第八课建立SAS系统的数据集(DATASTEP)
用户用SAS数据步(DATASTEP)创建一个数据集的方法,与前两种SAS/ASSIST和SAS/FSP创建一个数据集的方法相比,DATASTEP是一种非交互式的全部编程实现的方法。
这种方法能把多样的、复杂的外部文件数据格式通过程序语句的控制转换为我们所需的SAS数据集。
一、DATA程序步的三个主要步骤
为了从外部原始数据文件得到SAS数据集,DATA程序步的三个主要步骤为:
●启动一个数据步,命名将要创建的数据集(使用DATA语句)
●确定要读入的外部文件(使用INFILE语句)
●描述如何读入每一条记录(使用INPUT语句)
如果需要在程序中直接嵌入数据,第二步用CARDS语句代替INFILE语句。
所对应的一般程序结构如下:
Data所要创建的数据集名;
Infile‘读取的外部文件名’
Input变量1读入模式变量2读入模式……;
Run;
此程序结构很容易被错误理解为顺序结构,其实它的内部执行结构是一种循环结构。
如图8.1所示是它执行过程的程序流程图。
图8.1执行DATA步时的内部循环过程
PDV(ProgramDataVector)称为程序数据向量,它是根据DATA步中的INPUT语句所确定的变量和变量的读入模式来创建的,假设INPUT语句中各变量的长度为name$1-8、sex$1-2、bdate1-8、age1-3、height1-6、weight1-6、income1-8、sdate1-6,所创建的一个PDV如下表:
name
sex
bdate
age
height
weight
income
sdate
8
2
8
3
6
6
8
6
整个DATA步程序执行过程中,涉及到:
●一个存放外部文件记录的输入缓冲区
●一个存放当前观测的PDV向量
●一个外部文件记录指针
●一个程序指针
●一个SAS数据集观测指针
如图8.2所示。
图8.2文件记录指针、程序指针、观测指针
二、读入模式
确定变量的读入模式共有四种:
●column模式
●formatted模式
●list模式
●named模式
我们在这里将介绍三种主要的column模式、formatted模式和list模式。
1.Column模式
Column模式适用于读入数据固定在某些列中或数据中只包含标准的字符和数字。
在INPUT语句中的一般使用形式如下:
Input变量1<$>开始列<-结束列><.小数位>变量2……;
变量后不带$符号表示此变量读取数字。
例如,我们在NOTEPAD记事本程序中输入如图8.3所示的内容,操作如下:
●在Windows桌面上的开始菜单中选择
●程序/附件/记事本——打开NOTEPAD程序方法
●并以Testdata.dat文件名存入到D:
\sasdata\mydir目录下,作为一个我们用来实验的外部文件
图8.3用NOTEPAD程序创建外部文件
相应地,在SAS系统的PROGRAMEDITOR中提交下面程序:
Datatestd1;
Infile‘d:
\sasdata\mydir\testdata.dat’firstobs=2obs=4;
Inputcode$1-8sex$9bdate$10-16income17-23.2;
Procprintdata=testd1;
Run;
上面的程序的数据步在临时库WORK中创建了SAS数据集work.testd1,而过程步PRINT则显示该数据集,在OUTPUT窗口中显示的运行结果如图8.4所示。
2.
图8.4用Column模式读入外部文件后的SAS数据集
Formatted模式
Formatted输入模式适合于含有不标准数据的文件,是一种更常用的输入模式。
它有一根指针来先定位输入数据的开始位置,输入格式放在相应变量之后,输入格式指出了数据的类型和取值的宽度。
它有以下两种格式:
格式一:
Input<指针控制>变量1输入格式<@|@@>…;
格式二:
Input<指针控制>(变量表)(输入格式表)<@|@@>;
<@|@@>是行固定说明符,可选项。
●单尾符@作用是为了执行下一条INPUT语句时,仍然把指针保持在当前输入的记录上。
用于一个数据行用多条INPUT语句读取数据。
●双尾符@@作用是为了执行下一条INPUT语句时,甚至在DATA步重复执行时,仍然把指针保持在当前输入的记录上。
用于一个数据行含有多条观测值时读取数据。
行固定说明符也适用于Column模式。
(1)使用单尾符@
例如,对外部文件Testdata.dat也可以采用多条INPUT语句读取数据,DATA步程序如下:
Datatestd2;
Infile‘d:
\sasdata\mydir\testdata.dat’;
Inputcode$1-8sex$9@;
Inputbdate$10-16income$17-23.2;
Procprintdata=testd2;
Run;
(2)使用双尾符@
如果外部文件testdata.dat中的四条记录数据不是按四行而是按一行的形式存放的,DATA步程序如下:
Datatestd2;
Infile‘d:
\sasdata\mydir\testdata.dat’;
Inputcode$1-8sex$9bdate$10-16income$17-23.2@@;
Procprintdata=testd2;
Run;
(3)使用指针控制
指针控制可以把指针在行及列中的缺省位置当前行第一列重新定位,使INPUT语句知道从哪行哪列开始读取数据。
下表列出了可以同INPUT语句一起使用的两种类型的指针控制。
指针控制
相对位置
绝对位置
列指针控制
+表达式值
@表达式值
行指针控制
/
#表达式值
例如,下面的DATA步程序是把列指针定位在第10列。
Datatestd3;
Infile‘d:
\sasdata\mydir\testdata.dat’;
a=2;
b=5;
Input@(a*b)bdate$7.;
Procprintdata=testd3;
Run;
OUTPUT窗口中运行结果如图8.5所示。
图8.5用列指针控制读入外部文件后的SAS数据集
“/”表示行指针移到下一行的第一列。
例如,下面的数据步程序读取的是左上角到右下角对角线上的一条记录。
Datatestd4;
Infile‘d:
\sasdata\mydir\testdata.dat’;
Inputcode$1-8/sex$9/bdate$10-16/income17-23.2;
Procprintdata=testd4;
Run;
在OUTPUT窗口中显示的运行结果如图8.6所示。
图8.6用行和列指针控制读入外部文件后的SAS数据集
变量表(输入格式表)是一种分组格式表,适用于当输入的数据都以同一格式排列时,是INPUT语句的必选项。
用分组格式表可以缩短INPUT语句的书写长度,因为输入格式表是被循环使用的,所以相同的格式只要在输入格式表写一遍;另外,如果变量名是“相同字符+序号”组成的,还可以在变量表中用简单的形式列出来。
例如,INPUT(test1-5)($4.)。
如果输入的数据的格式不是全部相同,而是部分相同可以在输入格式表中采用“重复次数*输入格式”。
●例如,INPUT(test1-5)(3*7.2,2*5.2);
3.list模式
list模式也称自由格式输入,是使用最方便的输入方式。
当外部文件中的输入值之间至少有一个空格隔开,且丢失值用小数点表示,字符型数值长度不超过8个字节(否则需用LENGTH,ATTRIB或INFORMAT语句规定长度)时,只需在INPUT语句中列出要被赋值的变量名即可,而没有必要知道数据占据哪几列。
变量的顺序和它们的数据值在数据行中的顺序应该是一致的。
由于SAS系统在读取数据时是扫描整个数据输入行,因此不能有选择地读取其中的一些数据值,但是可以不再读某个点以后的值。
在INPUT语句中它有以下两种格式:
格式一:
Input<指针控制>变量1<$><&><@|@@>……;
格式二:
Input<指针控制>变量1<:
|&|~><输入格式><@|@@>…;
“&”、“:
”和“~”是自由格式输入方式中的三个格式修饰符。
作用如下:
●“&”——指明字符型输入值可能嵌有一个空格。
因为在正常情况下空格为分隔符。
因此不同的数据之间最好用较多的空格隔开,这样字符型输入值中也就能嵌有较多的空格。
●“:
”——指明变量的值是从以下非空格列中读取,直到第一次遇到空格或数据行末尾或读满输入格式指定的列数而结束。
●“~”——指明当读字符值时,且INFILE语句中采用DSD选项,INPUT语句用一种特殊方法处理单引号和双引号及分隔符。
若INPUT语句中使用此格式修饰符,则引号被保留作为这个值的一部分,若INPUT语句中没有使用此格式修饰符,则引号被去掉。
例如,我们在NOTEPAD记事本程序中输入如图8.7所示内容,并以Testdata2.txt文件名存入到D:
\sasdata\mydir目录下,作为第二个我们用来实验的外部文件。
图8.7数据带引号和空格且以分隔符隔开的外部文件
将图8-7所示的用逗号作为分隔符、字段数据中有空格和引号中有逗号的数据记录读入到SAS数据集,相应的数据步程序如下:
Datatestd5;
Infile‘d:
\sasdata\mydir\testdata2.txt’dsd;
Inputname&$15.ageaddress~$40.pc;
Procprintdata=testd5;
Run;
在OUTPUT窗口中显示的运行结果如图8.8所示。
第九课
图8.8用LIST模式的格式修饰符读入外部文件后的SAS数据集
建立SAS系统的数据集(ACCESS)
SAS/ACCESS是一个SAS系统的与外部数据库的接口模块,它为用户提供了透明地访问其他数据库文件的能力。
所谓透明访问是指用户不必知道各种外部数据库的物理访问结构,只要知道数据库的逻辑结构,这样对各种不同物理结构的外部数据库访问就变成一样了。
SAS/ACCESS可以访问所有流行的数据库管理系统的文件。
我们在这里主要介绍dBASE的*.DBF数据库文件与SAS数据集的转换。
一、用SAS/ACCESS建立描述符和数据视窗
为了使SAS/ACCESS系统能访问外部数据库,首先SAS/ACCESS系统要建立外部数据库文件的描述性数据文件(.ACCESS),然后通过存取这个描述性文件的描述符,生成一个或多个数据视窗文件(.VIEW),这样SAS的其他过程就可以透明地访问这个外部数据库中的数据了。
例如,在目录D:
\SASDATA\MYDIR下存在一个DBF文件SALES.DBF,我们用SAS/ACCESS窗口来建立描述符和数据视窗,并在SAS系统中显示这个SALES.DBF外部数据库文件中的记录。
我们命名这个描述符文件名为STUDY.DBFSAS.ACCESS,数据视窗文件名为STUDY.DBFSAS.VIEW。
具体操作步骤如下:
1.发布ACCESS命令进入SAS/ACCESS窗口
进入SAS/ACCESS窗口还可以选择Globals/Access/Accessdatabasefiles命令,另外SAS/ASSIST软件主菜单下选择DATAMGMT子菜单,再选择DBMSACCESS子菜单同样可进入SAS/ACCESS窗口,后面的操作都相同。
在SAS/ACCESS窗口的Libname列前面的横线上键入?
回车,可以查看所有能在横线上发布的命令,如图9.1所示。
图9.1ACCESS窗口和可在横线上发布的命令
2.选择File/New命令创建SAS/ACCESS存取描述符
如图9.2所示。
●在LIBREF库标记输入框中键入STUDY
●在NAME名字框中键入DBFSAS
●输入完后选择OK按钮
STUDY库标记应该在事先用LIBNAME命令已经创建存在。
接下来将创建文件名为STUDY.DBFSAS.ACCESS的存取描述符。
图9.2ACCESS窗口和可在横线上发布的命令
3.在SelectData菜单中选择DBFFiles
如图9-3所示是各种外部数据库的文件后缀,可以选择其中一个作为访问的数据库。
在本例中我们要访问的是dBASE系统的*.DBF数据库文件,所以选择DBFFiles。
只要MOUSE单击一下即可。
4.
图9.3选择所要访问的外部数据库的类型
输入外部数据库文件所在路径和文件名
如图9.4所示。
●在ACCESS:
CreateDescriptor对话框中输入外部数据库文件所在路径和文件名d:
\sasdata\mydir\sales.dbf后按Enter。
●可以与SAS库标记STUDY所指定的目录不同
●指定的数据库字段名AssignNames现在为NO,用户可以修改外部数据库字段的变量名(逻辑上修改)
●如果AssignNames指定为YES,则SAS系统所见的逻辑数据库上字段变量名与外部物理的数据库字段变量名一致。
图9.4输入外部数据库文件所在路径和文件名
5.选择所需要的数据域和更改域名
如图9.5所示,在外部文件存取描述符显示窗口中,可以在横线上发布如下命令:
●S——选择该数据域
●D——删除该数据域
●X——恢复已作了删除标记的数据域
重新定义描述符,除了可以选择所需要的数据域外,还可以更改数据域名。
在例中我们删除第一个数据域DELETE_FLG,它本来是用来存放一条记录的删除标记的。
更该原数据库PERIOD域的域名为DATE。
6.
图9.5选择所需要的数据域和更改域名
选择File/End保存命令后在ACCESS窗口查看*.ACCESS
如图9.6所示,我们重新调出ACCESS查看,在STUDY库下新建了一个STUDY.DBFSAS.ACCESS描述符文件。
在库名前面的横线上键入ED命令可以重新编辑此描述符文件,将返回到图9-4所示的窗口。
图9.6在ACCESS窗口查看是否已经建立了描述符文件.ACCESS
7.横线上发布CV命令创建*.VIEW视窗文件
在横线上发布CV命令后进入视窗描述显示窗口,如图9.7所示。
描述符所在库名输入STUDY,成员名输入DBFSAS,执行Locals/Selectall命令后,将选择所有的数据域,且数据视窗域名与外部数据库字段名相同。
最后,选择File/End保存命令退出此窗口。
图9.7创建*.VIEW文件的窗口
8.查看*.VIEW文件,并在横线上发布BL浏览命令
如图9.8所示,我们返回ACCESS窗口查看,发现又新增一个STUDY.DBFSAS.VIEW视窗文件。
在它的Libname列前面的横线上键入BL命令,可以浏览外部数据库文件Sales.dbf的所有记录。
图9.8发布BL命令浏览可访问的外部数据库
二、使用PROCACCESS过程访问外部数据库文件
在SAS/ACCESS中还提供了ACCESS过程步,使得用户可以直接通过编程达到访问外部数据库文件的目的。
例如,我们要访问的外部数据库文件所在目录和文件名,要创建的描述符文件名和视窗文件名都与上面的例子相同。
假设要访问所有的记录和数据字段。
程序如下:
LibnameStudy“d:
\sasdata\mydir\”;
ProcAccessDBMS=DBF;
CreateStudy.dbfsas.access;
Path=“d:
\sasdata\mydir\sales.dbf”;
CreateStudy.dbfsas.view;
Selectall;
Run;
其中DBMS选项指定了外部数据库文件的类型为DBF文件,第一个Create语句指定将要创建的ACCESS存取描述符的名称,Path语句指定了外部数据库文件的位置。
第二个Create语句指定将要创建的SAS数据视窗的名称,Selectall语句则选定了Study.dbfsas.access中的所有变量。
三、生成其他格式的外部数据库
假设我们的操作方向与上面相反,是要将已经存在的数据集STUDY.DBFSAS.VIEW来建立一个外部的数据库DBF文件,外部数据库文件的名称定为SASDBF.DBF,存放的目录仍然是D:
\SASDATA\MYDIR。
同样可以使用SAS/ACCESS软件来实现,具体操作步骤与上面类似,简述如下:
●发布ACCESS命令
●在SAS/ACCESS窗口的菜单中选择Locals/Load命令
●在SelectData窗口选择DBFFiles
●在DBLOAD窗口中的InputData域输入STUDY.DBFSAS,在Path域输入d:
\sasdata\mydir\sasdbf
●在菜单中选择Locals/Load命令,系统显示SASDBF.DBF文件已经存在
我们也可以使用SAS系统的DBLOAD过程步,通过编程达到将SAS数据集生成各种外部数据文件的目的。
例如,上面的操作也可通过下面的程序实现:
LibnameStudy“d:
\sasdata\mydir\”;
ProcdbloadDBMS=DBFDATA=Study.DBFSAS;
Path=“d:
\sasdata\mydir\SASDBF.dbf”;
Load;
Run;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 系统 数据 分析 建立 SAS DATASTEP