SAS课件2编程.docx
- 文档编号:16424316
- 上传时间:2023-07-13
- 格式:DOCX
- 页数:50
- 大小:217.19KB
SAS课件2编程.docx
《SAS课件2编程.docx》由会员分享,可在线阅读,更多相关《SAS课件2编程.docx(50页珍藏版)》请在冰点文库上搜索。
SAS课件2编程
第二章SAS编程基础
运行本书程序前,需要创建以本书样本数据库(ResDat)为物理地址的SAS逻辑库ResDat。
创建“ResDat”SAS逻辑库操作如下。
右击SAS资源管理器,选择VIEW,在新建逻辑库菜单的“名称”栏内填写“ResDat”。
选择“启动时启用”,在“路径”栏浏览样本数据库(ResDat)为物理地址,单击“确定”按钮。
本书的许多结果数据集将存储在SAS逻辑库ResDat中。
2.1SAS语言组件
2.1.1SAS文件
使用SAS时会碰到许多不同类型的文件,如SAS数据集、SAS目录册等,这些由SAS创建、储存、管理的文件就是SAS文件。
所有的SAS文件都保存在SAS逻辑库中。
最常用的SAS文件就是SAS数据集,另外一个是SAS目录册。
SAS目录册包含各种类型的信息。
比如功能键的设定等。
SAS编辑器可数存储程序文件.立件类型一节会对主要的SAS文件作详细说明。
2.1.2SAS外部文件
SAS不能直按识别的数据文件称为外部文件。
外部文件一般用于储存数据。
外部文件一般用来储存以下内容:
·要读入SAS数据文件的原始数据;
·SAS程序语句;
·过程步输出。
2.1.3DBMS文件
SAS软件可以与其他数据库产品进行数据文件转换。
例如数据文件方面使用最广泛的DBMS(databaseMagementsystem)数据库系统文件,就可以实现与SAS数据集之间的转换。
2.1.4SAS语言元素
SAS语言由语句、表达式、选项、格式和函数组成。
SAS有两种语句:
·数据步;
·过程步。
在SAS中,通过数据步和过程步来使用SAS语言的元素。
这两种语句在后面都会有详细的介绍。
数据步是一组语句组合,它可以进行以下操作,
·从外部文件中读取数据;
·将数据写入到外部文件中;
·读取SAS数据文件和视图;
·创建SAS数据文件和视图。
过程步用来对SAS数据集进行分析和产生报表。
比如对数据集进行分析、画图、查询和打印等操作。
在数据步和过程步外,可以使用SAS的全局通用语句和系统选项语句。
2.1.5SAS宏工具
BASESAS软件包括SAS宏功能,这是一种强大的编程工具,可以用来客户化以及拓展SAS程序,减少重复代码的输入。
宏就是包含被编译的宏程序语句和文本的SAS文件。
可以使用宏自动地生成SAS语句和命令,在日志中写入信息,建立和改变宏变量的值。
2.2SAS文件系统
2.2.1逻辑库
SAS逻辑库由一组SAS文件组成。
SAS软件系统的信息组织有两层,第一层是SAS逻辑库,第二层是SAS文件。
SAS逻辑库是一个逻辑概念,本身不是物理实体,它对应的实体是操作系统下的一个文件夹或几个文件夹中的一组SAS文件。
在不同的操作系统下,SAS管理、组织、定位SAS文件的原理和该操作系统是一样的。
例如在Windows这样的以目录为基础的操作系统中,SAS逻辑库就是一组储存在同一目录下被同一引擎访问的文件,如图2.1所示。
其他文件也可以存放在该目录下,但只有能被SAS识别的文件才能显示在逻辑库中。
1.逻辑库名与引用SAS文件
逻辑库名是SAS名,长度不能超过8.3。
如SAS逻辑库:
ResDat、SASHELP、SASLISER、WORK等。
建立SAS逻辑库的方法:
·用菜单操作;
·用LIBNAME语句。
语句格式:
LIBNAMElibref
语法说明:
libref:
逻辑库名。
SAS-data-library:
逻辑库对应的物理地址。
engine:
引擎名称(缺失时为默认引擎)。
例2.1用LIBNAME语句创建SAS逻辑库。
libnameResDat‘D:
\ResDat’;
例中,创建SAS逻辑库RESDAT,对应物理文件夹为D:
\ResDat。
多个文件夹创建一个SAS逻辑库:
libnamea(‘D:
\Resbd\’,‘D:
\ReSfin\’);
例2.2引用非临时库的SAS文件时,必须使用两级命名方式,而引用临时库的SAS文件时,可以直接使用文件名,效果等同于work.文件名。
即以如下形式:
逻辑库名.文件名;
data=ResDat.ID000001;
例中,引用逻辑库RESDAT下的数据集文件IDX000001,
2.临时库和永久库
临时逻辑库是指它的内容只在启动SAS时存在,退出SAS时内容完全被删除。
系统默认的临时逻辑库为WORK。
引用临时库WORK中文件时,可以不加库名WORK。
永久逻辑库是指它的内容在SAS关闭对话之后仍旧保留,直到再次修改或删除。
SAS系统中除了WORK以外的逻辑库都是永久库。
SAS系统自动指定的逻辑库SASHELP、SASUSER和MAPS都是永久库。
3.库引擎
库引攀是一组规定格式向逻辑库读写文件的内部指令。
利用库引擎SAS系统可以直接访问SAS其他版本创建的SAS文件和外部数据库格式的数据文件。
例如,在SAS9.1系统下读SAS6.12生成的文件时用V6库引擎。
在SAS系统下读ODBC,BMDP,DB2,ORACLE,Sybase,TERADATA和SPSS等数据文件时,要用到相应的库引擎。
每个SAS逻辑库都对应一个库引擎。
SAS逻辑库引擎是软件的一个元件,用来组建SAS与SAS逻辑库之间的接口。
它用来帮助SAS对文件进行定位,并将SAS可以识别的文件内容呈现出来。
库引擎功能包括:
·读取和写入数据;
·列出库中的文件;
·删除和重命名文件。
SAS通过不同的库引擎读写不同格式的文件。
每个SAS库引擎都有着自身的运行特性。
例如
·运行由旧版本SAS软件生成的文件;
·读取由其他软件生成的数据库文件;
·存储和访问硬盘或者磁带上的文件;
·决定文件中的变量和观测如何放置;
·将文件从物理位置地址读取并放入到内存;
·在不同的操作系统之间传输SAS文件。
一般不用关心如何针对不同的文件选择引擎,因为SAS系统一般会自动选择该文件所适用的引擎,当然,如果发出的操作指令该引擎不支持,SAS日志窗口就会显示出错信息,这时就需要选择特殊的引擎来完成该项任务。
2.3数据集
1.数据集分类
SAS数据集有两类:
SAS数据文件;
SAS数据视图。
虽然表面上二者看起来很像,但SAS数据文件同时描述信息和存储数据值,而SAS数据视图则并不实际地存储数据,后面会讲到SAS数据视图其实就是一个查询语句,这个查询语句建立了一个逻辑数据集,每次打开SAS数据视图就相当于运行了一次查询语句。
要注意的是,这两个数据文件在同一级目录或逻辑库下时不能同名。
如图2.2所示。
Work临时逻辑库下的数据文件和数据视图,Class是数据视图,Class1是数据文件。
2.数据集构成
SAS数据集组成部分包括:
·描述信息;
·数据值。
图2.2Work临时逻辑库
以Class1表的前8个观测为例,如图2.3所示。
SAS数据集的一行称为一个观测,一个观测行一般就是一个个体的信息。
SAS数据集的一列称为一个变量,包括一组有着相同特征的值。
SAS使用缺失值表示一个观测中某个变量值的缺失。
图2.3Class1表的前8个观侧
3.使用窗口菜单操作数据集
编辑和修改数据集。
表编辑器(Viewtable)用来浏览、操作SAS数据集。
打开表编辑器的方法:
1)直接打开数据集(默认启动表编辑器);
2)执行“工具”|“表编辑器”菜单命令,再从表编辑器打开的情况下,单击“文件”|“打开逻辑库下的数据集”,如图2.4所示。
图2.4打开表编辑器
3)在命令框键入vt+空格+表名,如vtclass。
表的使用模式。
表编辑器有浏览模式和编辑模式。
浏览模式是默认的显示模式,图2.5是表编辑器的浏览模式,该模式下无法改动数据集,图2.6是编辑模式,该模式下可以修改数据集。
图2.5表编辑器的浏览模式
图2.6表编辑器的编辑模式
浏览模式切换到编辑模式的方法:
在表中任意地方右击,在弹出菜单中选择“编辑模式”。
单击“编辑”菜单,在弹出菜单中单击“编辑模式”。
如图2.7所示。
要注意的是在编辑模式下,可能会遇到多个SAS进程同时访问和修改同一表中的观测。
为了防止出现修改的混乱,编辑模式有两种编辑访问限制,如图2.8所示,一个是默认开启的行级编辑访问,对该行进行锁定。
在该行编辑完毕之前,其他进程无法修改该行。
另一个就是表级编辑访问,在该表开启编辑模式之后。
其他进程无法对该表的数据进行修改。
数据属性的查看。
要查看表或者列的属性,可以直接选择“数据”菜单中的“列属性”或“表属性”。
如图2.9所示。
图2.7“编辑”菜单
图2.8“编辑”菜单
图2.9“数据”菜单
图2.10Class表属性
操作列。
选择表中的列,如图2.11中的Age,右击,就会出现图2.11所示的弹出菜单,该菜单可以编辑列的字体、颜色、升降序、列固定、隐藏、查看列描述信息和查看列属性。
列的字体、颜色可以使该列的数据显示有特定的字体和颜色。
列的升降序则是以该列对整个表的观测进行升降序排列。
列的隐藏操作可以将一些与目前操作无关的列隐藏起来,而实际上这些列仍然存在。
例如,可以将Class表中Age列Height列隐藏起来,如图2.12所示。
图2.11弹出菜单
恢复刚才隐藏的两个列。
选择“数据”|“隐藏/取消隐藏”,如图2.13所示,左边的Age,Height列在Hidden栏中。
若要取消隐藏,单击Age列,单击右箭头按钮,即可将该列取消隐藏。
在同一个视窗中,也可以将没有隐藏的列隐藏起来,只要单击在Displayed栏中的列如Name,单击左箭头,即可将Name列隐藏。
图2.12隐藏列
图2.13“隐藏/取消隐藏”窗口
当一个表中的列非常多,而有些比较重要的列需要和其他列一同显示,比如一个表中的ID列、Name等,这时就可以采用固定列的方式,通过单击菜单“数据”,“固定”,如图2.14所示,选择要固定的列进行固定或释放。
这样,这些被固定的列不会随着视窗的移动而发生移动,便于更好地查看数据。
图2.14“固定列”窗口
2.2.3数据文件
SAS数据文件是包含描述信息和数据值的SAS数据集。
一般来说,SAS数据文件分类如下:
普通的SAS数据文件:
SAS格式的数据文件。
接口数据文件:
以其他数据软件格式储存数据的数据文件。
SAS提供对应的引擎来对这些文件中的数据进行读取和编写,如Oracle、DB2、Sybase、ODBC、BMDP、SPSS和OSIRIS。
虽然数据文件与视图文件在应用时没有任何区别,但这两者之间也有一定的差异。
前面已经提到二者最大的不同就是数据文件实际储存数值,视图只是包含表的描述信息以及一组用来读取数据的查询语句,并不实际存储数据。
数据文件是静态的,而视图则是动态的。
因为视图每次打开的时候,就相当于运行了一次查询语句,所以只要其引用的数据源发生了改变,打开的视图就会发生改变,而数据文件只有自身被修改时才发生改变。
·SAS数据集可以保存在磁带或其他存储媒介上,但数据视图由于其动态特性,不能保存在磁带上。
·SAS数据视图是只读性的,不可以修改,而一些SQL视图则可以被修改。
关于如何修改请参见后面的视图文件部分。
·SAS数据文件可以包含审计跟踪文件。
SAS审计跟踪功能可以单独建立一个文件,把对该SAS数据文件的相关修改记录下来。
·SAS文件还可以拥有完整性约束。
更新数据文件时,完整性约束会自动地检查新的数据是否处于要求的数据范围内。
而SAS视图则只能通过对数据源设定完整性约束才能保持一定的数据标准。
·SAS数据文件可以被索引,索引可以使SAS在搜索数据的时候速度更快,而SAS视图不能被索引。
·SAS数据文件可以被加密,而视图则不可以。
·SAS数据文件可以被压缩,而视图文件不可以。
2.2.4数据视图
1.数据视图定义
前面已经介绍了数据视图的基本概念。
SAS数据视图就是用来从其他文件中读取数据的一种SAS文件。
它只包括数据集的描述信息,如数据类型、变量长度等,再加上如何从其他文件中提取数据所要求的信息。
如SQL视图文件就包含一个查询语句。
SAS视图一般分为两种:
·NativeView,由数据步或者SQL过程创建;
·InterfaceView,由SAS/ACCESS软件创建。
InterfaceView可以读写其他数据库管理系统(DBMS)中的数据库,如DB2或ORACLE数据库等。
2.何时使用视图
数据视图占用额外的运行时间。
而数据文件则占用额外的硬盘空间。
数据视图的动态性可以保证数据的随时更新。
3.数据视图的使用优势
·可以使用连接多个表的视图来合并数据集。
·数据视图可以节省大量的存储空间。
·数据视图可以保证读取的数据集永远都是最新的。
·更改一个数据视图只需要改变这个视图的查询语句。
·使用SAS/CONNECT软件,视图可以将多个不同主机上的数据文件整合,以整体的形式呈现。
4.数据步视图
数据步视图包含用于从多个数据源中读取数据的数据步程序,这些数据源包括以下几种:
·原始数据文件;
·SAS数据文件;
·PROCSQL视图;
·SAS/ACCESS视图;
·DB2、ORACLE或者其他DBMS数据。
语法格式:
data数据集名称/view=数据集名称;
在data步中的最后一个数据集名称后加上“view=数据集名称”选项,这个选项告诉SAS对程序进行编译,但并不运行,而被编译的程序编码则储存在view后的数据视图中。
例2.3创建数据步视图。
dataResdat.class1/view=Resdat.class1;
setResdat.class
日志中信息为:
-------------------------------------------------------------------------------------
1dataResdat.class1/view=Resdat.class1;
2setResdat.class1;
3run;
NOTE:
DATASTEP视图已保存在文件Resdat.class1中。
NOTE:
存储的DATASTEP视图无法在不同的操作系统下运行。
-------------------------------------------------------------------------------------
这时在逻辑库Resdat中创建一个叫名称为class1的数据视图文件。
5.PROCSQL视图
PROCSQL视图为一个带有名称的PROCSQL查询。
它可以读写的数据源同数据步视图。
在PROCSQL部分将会详细介绍如何创建PROCSQL视图,这里简单举例,使用SQL语句中的CREATEVIEW语句。
procsql;
createviewResdat.easselect*fromResdat.class;
quit;
日志中信息为:
-------------------------------------------------------------------------------------
4procsql;
5createviewResdat.easselect*fromResdat.class;
NOTE:
SQL视图Resdat.E已定义。
6run;
-------------------------------------------------------------------------------------
2.2.5存储编译的DATA步程序
1.定义
存储编译的DATA步程序是包含已经被编译过DATA步程序并储存在SAS逻辑库中的程序文件。
这样下次运行时就不需要再进行编译。
它们的文件类型是程序。
注意,存储编译的DATA步程序只适用于DATA步,不能包含全局通用语句。
如果包含了这种语句,在储存编译程序的时候,文件并不包含这些全局通用语句,而且SAS日志中不会出现任何警告。
这种程序文件的好处就是可以避免重复输入相同的程序。
2.创建存储编译的DATA步程序
语句格式:
DATAdata-set-name(s)/PGM=stored-program-name
<(
语法说明
data-set-name
数据集名称
stored-program-name
存储编译的DATA步程序名称
password-option
给DATA步程序名称分配一个密码
source-option
存储或编译源码
2.2.6其他SAS文件
1.表词典
表词典是一个包含多个SAS系统信息的SAS数据视图,如表2.1所示。
这些信息可以是SAS逻辑库信息、SAS数据集信息、宏信息、SAS系统选项信息以及正被SAS对话使用或可以被使用的外部文件的信息。
访问表词典的时候,SAS会检查最新的SAS系统统状态并返回所需相关信息,这个过程在每次访问表词典的时候都会重新运行以保证得到的是最新信息。
访问表词典的方法如下:
·使用PROCSQL来查询所需要的表词典,这些表存储在DICTIONARY逻辑库中。
·使用SAS过程或者是SAS数据步语句,或打开SASHELP逻辑库中这些表词典相对应的视图文件。
表2.1表字典的综合信息
表名
包含的信息
视图
DICTIONARY.CATALOGS
SAS目录册及所包含的条目
SASHELP.VCATALG
DICTIONARY.COLUMNS
列(或变量)及其特征
SASHELP.VCALUMN
DICTIONARY.DICTIONARIES
所有表词典
SASHELP.VACTNRY
DICTIONARY.EXTFILES
文件标识名和外部文件物理存储地址
SASHELP.VEXTFL
DICTIONARY.INDEXES
SAS数据集索引
SASHELP.VINDEX
DICTIONARY.MEMBERS
SAS数据集
SASHELP.VMEMBER
DICTIONARY.OPTJONS
目前设定的SAS系统选项
SASHELP.VAPTION
DICTIONARY.STYLES
ODS类型
SASHELP.VSTYLE
DICTIONARY.TABLES
SAS数据文件和视图
SASHELP.VTABLE
DICTIONARY.VIEWS
SAS数据视图
SASHELP.VVIEW
其中使用PROCSQL查询表词典部分,SQL章节有详细的说明。
下面只给出一个简单的查询例子。
prossql;
title'AllTablesandViewsintheSASHELPLibrary';
selectlibname,memname,memtype,nobs
fromdictionary.tables
wherelibname='SASHELP';
/*注意逻辑库名称要大写*/
2.目录册文件
SAS目录册文件是特殊的SAS文件,用来存放多种不同种类的信息文件。
这些信息文件都很小,每个信息文件都被称为一个条目(entry),条目有多种不同的类型。
一些目录册文件包含一些系统信息如功能键定义信息。
2.3SAS语言元素
主要的SAS语言元素包括:
·数据集选项。
·输出和输入格式;
·函数和CALL子程序;
·应用响应测量宏,
·语句书
·SAS系统选项;
·表达式。
表达式部分内容很多,后面章节有专门介绍。
2.3.1数据集选项
数据集选项用在SAS数据集名称后的括号中,多个选项之间用空格隔开。
括号中的数据集选项可以对数据集进行如下操作:
·重新命名变量;
·选择需要的观测;
·输出数据集中保留或删除的变量;
·数据集加密。
语句格式:
dataset-nam(Data-set-options)
(option-1=value-1<-option-n=value-n>)
例2.4数据集选项举例。
datascores(keep=teamgame)game2game3);
/*scores中只保留team,game1game2game3这4个变量*/
procprintdata=new(drop=year);/*去掉变量year*/
setold(rename=(date=StartDate));/*将date改名*/
2.3.2输入和输出格式
输出格式format是SAS用来确定如何输出或写出数据值的指令,用FORMAT控制数据值在输出时所使用的格式,如YYMMDD10.格式将一个日期数据输出读入到新的数据集中。
输入格式informat是SAS用来确定如何将数据读入变量的指令。
例如带有美元符号和千分号读入的数值数据$1,000.000。
要想在读入该数值之前去掉美元符号和逗号,可以使用COMMA11.的输入格式读入。
如果在输入或输出数据集的过程中没有设定变量的输入和输出格式,系统会自动使用原数据集中的这个变量原有的输入输出格式。
语句格式:
<$>format
<$>informat
格式说明:
$
指定为字符格式,如果该项空缺,则默认是数值格式
format
规定有效SAS输出格式
informat
规定有效SAS输入格式
w
设定输入输出的长度,一般来说是数据所占的列的数目
d
设定数值数据中小数点的位数
注1.必须包括点“.”。
注2.如果输入格式的长度不够读入输入数据的所有列,可能会得不到期望的结果。
这种问题多出现在日期和时间输入格式上,此时就必须调整informat的长度。
同样如果输出格式的长度不够输出数据的所有列,输出格式就会将数据按照某种方式压缩呈现。
注3.如果输入格式出现了问题,例如用数值格式读入了字符值。
SAS就会将出错的信息输出到SAS日志中。
同时将该变量值设定为缺失。
如果输出格式出现问题,SAS首先会尝试使用与数据类似的输出格式类型;若尝试失败,则会将信息输出到日志窗口。
以后的许多章节都有关于输入与输出格式的详细介绍。
这里不再赘述。
2.3.3函数和CALL子程序
1.函数定义
SAS函数对数据参数进行计算处理并返回一个值。
大多数函数所使用的参数是由用户提供的,一小部分函数使用系统提供的参数。
在BASESAS软件中,可以在数据步程序语句,WHERE表达式、宏语句,SQL语句及一些统计过程语句中使用函数。
2.CALL子程序定义
CALL子程序用来改变变量值,或执行一些系统功能。
CALL子程序类似于函数,但是不能在赋值语句中使用,所有的SASCALL子程序都只能被CALL语句使用。
也就是说所有的CALL子程序都要放在CALL关键词后。
详细的介绍见第3章SAS函数与CALL子程序。
2.3.4语句
SAS语句就是一系列关键词、SAS名称、算符,以及特殊字符的组合。
所有的SAS语句以分号结尾。
SAS语句一般分为数据步语句与过程步语句,以及可以用在SAS程序任何地方的全局通用语句。
KEYWORDpar
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SAS 课件 编程
![提示](https://static.bingdoc.com/images/bang_tan.gif)