930 likes | 1.34k Vues
第二讲 SAS 的数据存储与读取. 金融学院 冯建芬 博学楼 913, 64495048 danxin_97@ahoo.com.cn. 内容提要. SAS 对数据文件的管理; SAS 逻辑库与 SAS 数据集功能及其属性 建立逻辑库,读入文件; 建立数据集,读入原始数据; 建立空数据集 直接对变量赋值建立数据集 直接输入数据建立数据集 从其他数据集导入数据建立数据集 从外部文件导入数据建立数据集 输出原始数据 输出到输出窗口; 导出的外部文件; 输出单个变量的记录;. 涉及章节. 《SAS 编程技术教程 》 第二章, 第四章, 第五章,
E N D
第二讲 SAS的数据存储与读取 金融学院 冯建芬 博学楼 913, 64495048 danxin_97@ahoo.com.cn
内容提要 • SAS对数据文件的管理; • SAS逻辑库与SAS数据集功能及其属性 • 建立逻辑库,读入文件; • 建立数据集,读入原始数据; • 建立空数据集 • 直接对变量赋值建立数据集 • 直接输入数据建立数据集 • 从其他数据集导入数据建立数据集 • 从外部文件导入数据建立数据集 • 输出原始数据 • 输出到输出窗口; • 导出的外部文件; • 输出单个变量的记录;
涉及章节 《SAS编程技术教程》 第二章, 第四章, 第五章, 第六章: 6.1,6.2,6.3,6.5,6.9,6.10; 第十三章; 帮助目录:SAS 产品Base SASSAS 语言字典语言元素字典
本章目的 • 了解SAS管理数据的方式,掌握SAS的两种关键语句:data步和proc步; • 掌握各种引擎的逻辑库的建立; • 熟悉SAS程序的编写规则; • 掌握各种建立数据集的方式; • 掌握部分常用SAS语句的使用: libname ,data, input, cards, put , print, sort, import, export, file, infile,set; • 熟悉SAS的表达式规则; • 学习如何导入导出数据;
2.1 SAS对数据文件的管理 参见《SAS编程技术教程》第二章2.1-2.2
SAS作为一个信息加工和提交工具,对数据具有很强的分析和呈现功能,这些功能通过过程来实现,如 print过程实现打印输出功能, means过程实现基本统计量计算功能, reg过程实现回归功能 IML过程实现矩阵运算功能 surveyselect,随机抽样过程等; 所有这些功能只面向SAS数据集; 为此SAS也提供了很多工具,用于方便实现各种格式数据文件与SAS数据集的转换,方便用户发挥各种软件的优势,这也是为什么很多金融机构使用SAS处理数据的原因之一;
流行的数据库 Access,oracle,DB2, Sybase 文本格式 数据(txt,.csv) 其他文件格 式(excel,spss等) SAS数据集 SAS数据集 SAS程序 其它格式数据处理流程
逻辑库 文件 一、SAS文件和SAS逻辑库--逻辑库 • SAS逻辑库 SAS数据集可以按需要存入windows的不同子目录下,但在SAS系统下,不能类似word,excel等通过浏览文件的windows地址直接访问文件,必须为文件所在文件夹建立逻辑库,然后通过逻辑库对文件进行操作。
一、SAS文件和SAS逻辑库--逻辑库 • 逻辑库命名规则 • 首字符必须为英文字母(A-Z,包括大写和小写)或下划线(_); • 由数字、字母和下划线组成; • 最多不超过8个字符; • 不区分大小写 例2.1: ____, data_1, data_b, _abc_ 正确 数据库_1, data-1 不正确
一、SAS文件和SAS逻辑库--逻辑库 • 建立逻辑库 • 工具栏方式 打开explorer的library, 单击工具栏中的“ “; • 程序方式: LIBNAME libref <engine> 'SAS-data-library' < options > <engine/host-options>; 例2.2建立逻辑库data_1, 指向D:\ libname data_1 ‘d:\’ ;
一、SAS文件和SAS逻辑库--逻辑库 • 逻辑库的种类 分为临时逻辑库和永久逻辑库两种。 临时逻辑库中的文件只在SAS进程中存 在,关闭SAS系统就会被自动删除,SAS只有一个临时逻辑库--work; 永久逻辑库:其他系统默认逻辑库和用户建立的逻辑库都是永久逻辑库,其中的文件一旦建立不会被自动删除,可以永久保留在指定的windows文件夹中,但逻辑库名在SAS进程结束(即关闭SAS系统)后可能失效,除非选中“启动时启用”选项。
一、SAS文件和SAS逻辑库--逻辑库 • 引用SAS文件 指定逻辑库名以后,就可以用两级命名方式引用SAS文件: 逻辑库名.文件名 第一级为逻辑库名,第二级为文件名,中间用英文句点分开。 例2.3 在逻辑库redat1中建立数据集a; Data data1.a; /*数据集a在data1逻辑库中*/ Run; Data a; /* 数据集a在work逻辑库中*/ Run;
一、SAS文件和SAS逻辑库--数据集 • 数据集 SAS数据集是一种由SAS系统建立、维护和管理的数据文件,只有数据集才能被大部分过程作为处理的数据对象。 • SAS数据集格式的数据可以被快速打开,并进行浏览、修改和加工; • SAS数据集格式的数据可以进行各种分析处理和用表格及图形进行展示;
变量名 观测号 观测 一、SAS文件和SAS逻辑库--数据集 • 数据集构成 一个数据集包括两个组成部分:描述部分和数据部分; • 数据部分是打开逻辑库中的文件时展现在我们眼前的部分,是数据值的集合。
一、SAS文件和SAS逻辑库--数据集 • 描述部分:即属性,包含以下部分 • 数据集的名称 • 创建数据集的日期和时间 • 观测的个数 • 变量的个数 • 数据集的属性除名字(name)外,还可以添加标签(label),方便描述数据集存储数据的特性 • 数据集中的每一个变量也有属性: 类型、名字(name)、标签(label)、长度(length)、输入/输出格式(informat/format)等
一、SAS文件和SAS逻辑库--数据集 • 数据集相关格式规则 • 数据集命名(name)规则 • 首字符必须为英文字母(A-Z,包括大写和小写)或下划线(_); • 由数字、字母和下划线组成; • 最多不超过32个字符; • 不区分大小写 • 变量属性--变量名命名规则 • 数据集命名规则相同;
一、SAS文件和SAS逻辑库--数据集 • 变量属性-标签(label)书写规则 • 可以是中文、英文字母等任何符号; • 最长不超过256个字符; • 变量属性-类型(type) • 只有字符型(character),数值型(numeric)两种类型,一个变量只能属于一种类型; • 数值型变量只能是合法的数值,缺失值为”.”。日期属于数值型变量,取整数值,日期数据将1960年1月1日取值为0,每加1代表增加1天, 日期时间数据将1960年1月1日00:00:00取为0,每加1代表增加1秒。 • 字符型变量的值可以是任何字符串,,如“中国”“Alex” “Hello! 123”等,缺失值为“ ” ;
一、SAS文件和SAS逻辑库--数据集 • 变量属性-输入格式(informat) • 确定数据如何读入到SAS数据集; • 变量属性-输出格式(format) • 确定数据如何显示,即打开数据集我们看到的格式; 具体输入输出格式可以参见《SAS编程技术教程》第十三章;
一、SAS文件和SAS逻辑库--其他文件* • 数据视图:除我们常用的数据集外,还有一种数据视图,参见《SAS编程技术教程》第二章P34页,2.2.4节; 例: dataa/view=a; setdata.class; Run; • 目录册:特殊的SAS文件,用于存放多种不同种类的信息文件,比如可以将一系列的图放在一个目录册里,便于引用;(参看SAShelp逻辑库)
二、建立逻辑库,读入外部文件 SAS访问外部文件可以通过两种方式: 一种是将外部文件转换成SAS数据集(这种方式在2.2节会学习到) ; 另一种通过建立不同引擎的逻辑库进行访问,通过LIBNAME语句和库引擎连接的外部文件有两类: • 其他SAS版本或分析软件的数据集; • 流行数据库(DBMS) 当对DBMS指定了逻辑库名之后,就可以把它的表当作象SAS数据集一样,用标准的两级命名(逻辑库名.文件名)引用DBMS中的表。 SAS9.1系统支持的库引擎 参见第四章4.3节
二、建立逻辑库,读入外部文件 例2.3 连接SAS6版本数据集。 libname datav6 V6'd:\data'; run; 例2.4 连接SPSS数据集。 libnamespssspss'd:\ data '; run; 例2.5 连接ODBC数据源,访问SQL-Server 参见第四章4.5节
一、建立空数据集 • 建立空数据集 一般通过程序建立 例2.6 1. 建立空数据集a; a) Data a; Run; b) data data.b; Delete; Run;
二、SAS程序的构成及编写规则 • SAS程序的构成 SAS程序是由SAS语句构成的,构成一个语句由下面两种方式: • 一种是由关键词开始; 这种语句都有固定的格式,具体格式可以通过 SAS的帮助文件查到;如以“data“开头的语句,可以通过在索引中输入“data step”参看其应用方式; • 一种是SAS的表达式; 可对变量进行加减乘除等运算,如x=y+5;也可产生新变量,具体可参见第二章2.4节P41-45。 无论是哪种方式,SAS的语句都是以分号(;)结束
SAS程序的构成(续) • 由SAS关键词构成的语句又分为两种程序步: • 数据步 以Data 关键词开头,用于读入源数据文件和SAS数据集,修改、编辑或创建SAS数据集或文本文件,是进行数据处理使用最多的程序步。 该程序步设计非常灵活,需要你根据自己的要求设计不同的语句,如是否需要使用表达式、是否需要循环语句等等。 • 过程步 以proc关键词开头,面向已有的SAS数据集,完成某个特定的计算、分析和呈现功能,如进行统计分析、回归、画图、排序、打印等,也用于调用某些模块,如IML,SQL 相对data步,proc步的格式相对固定,只需根据自己的需求设定每个过程的参数即可。 每个过程步的使用方法参见SAS帮助->目录->SAS 产品->Base SAS->过程;
SAS程序的构成(续) 一般情况下,语句都要写在程序步中,但全局通用语句例外。 全局通用语句一般为SAS提供信息、索取信息或数据,在不同运行模式之间转移,给系统选项设定值等。可以用在SAS程序的任何地方。如 libname: 建立逻辑库 options:设定SAS系统选项 x: 发布主机操作系统命令,(MS-DOS命令) 详细可参见第11章 帮助信息:目录->SAS 产品->Base SAS->SAS语言字典语言元素字典;列出了在data步使用的语句和全局通用语句。
SAS程序的构成(续) 例2.7 全局通用语句的使用: a)X语句(X <command>) x mkdir d:\data1; /*在d盘建立文件夹data1*/ x cd g:\; /*将当前盘符设为g:\盘*/ x cd g:\data; /*将当前文件夹设为g:\data*/ x dir stk*.*/b>E:\Sas\outlist.txt; /*从data文件夹的文件列表中寻找文件名前三位是’stk’的文件,并将文件名输出到outlist文本文件*/ 后三行在进行文件批处理时非常有用! 系统命令可在cmd窗口下输入help查到
SAS关键词的语法如何解读 KEYWORD parameter…<Item1|item2…|itemn>options; 关键词 参数…<项目1或项目2…或项目n> 选项; 其中: •粗体---必须按显示形式书写的关键词; •白正体---用户提供的信息; •<>---括号内的信息可选; •|---任选。 参数PARAMETER不是任选项,不用括号,OPTIONS是选项关键词。
data 语句 在例2.6中我们使用data步建立了一个空数据集,data步以data语句开头,语法是: DATA <data-set-name-1 <(data-set-options-1)>> <. . .data-set-name-n <(data-set-options-n)>> </ DEBUG>; 其中: data是关键词; data-set-name-1,…data-set-name-n:是要建立的数据集的名字,一般是:逻辑库名.数据集名; (data-set-options-1):数据集选项,可以对数据集设定标签,更改变量名,删除或保留变量; /DEBUG:查看程序单步运行情况
例2.8 data语句 data a (keep= x y z drop=w rename=(x=varx)) b(keep=x); x=0; y=x; z=x+2*y; w=x*y; run; 这里建立了两个数据集,keep,drop,rename都是选项分别表示保留变量、删除变量、更改变量名; 另外“run;”表示提交程序。 (更详细的应用可以参见第六章6.1节,或帮助索引: data statement)
两个特殊的程序 • Data ;/*不建议使用*/ run; • Data _null_; /*在不需要建立数据集时使用,put ‘hello’;节省空间*/ run;
SAS语句的书写规则 • SAS语句的书写规则灵活自由: • 语句可在行的任一列开始; • 一个语句可以分写为多行; • 多个语句可以写在同一行; • 语句中各项之间至少用一个空格或特殊字符隔开; • 应遵守的书写规则: • 不同程序步间留空行; • 每条语句都要另起行。 • 比较规范的书写有助于阅读和检查,还可以减少书写错误。 • 注释语句的两种格式: • /* 注释内容 */ • * 注释内容; 为程序写注释是非常好的习惯,增加程序的可读性
三、直接赋值建立数据集 例2.9 Data a; X=0; Y=1; C=‘zhang xiao ming’; Run; 这里通过表达式直接建立变量并赋值
四、表达式(参见第二章2.4节) 表达式由一系列操作符和操作对象构成,产生一个目标值。 使用表达式可以对变量作变换和赋值,创建新变量,计算新数值以及控制条件语句的运行等。 操作对象有: • 变量; • 常数。 操作符包括: • 算术算符; • 比较算符; • 逻辑算符; • SAS函数; • 括号。
SAS常数 SAS常数是SAS系统可以识别的一些固定值。 例2.11 数值常数。 1, –5, 1.23, 1.2E23, 2E4 , 20000 例2.12 引用字符常数。 name=‘liu yu’ name=’TOM”S’; name=”TOM’S”; /*例中,两语句等价。*/ 要注意的是,字符常数是由引号括起来的;
SAS常数 数学常数:Constant 函数的应用 圆周率:constant(‘pi’) E: constant(‘e’) 帮助索引: constant function 目录:SAS产品base SASSAS 语言字典语 言元素字典函数与call 子程序
SAS常数(续) 例2.13 引用日期时间常数。 ’1jan2000’d; ’01jan00’d; ’9:25’t; ’18jan00:9:27:25’dt if begin=’01JAN2000’d then end=’31DEC2000’d; /*日期格式的直接引用只有这一种格式*/ /*关于SAS表达式的帮助信息: Base SASSAS 语言概念SAS系统概念表达式*/
SAS算符 SAS算符是一些符号,其作用是进行计算、比较等。 算术算符 例2.14 算术算符应用。 data; X=3.5**2.5; put X=; Y=9+1/3; put Y=; X=.; Y=1+X; put Y=; /*Y也是缺失值*/ run;
SAS算符(续) 比较算符 例2.15 比较算符应用。 if x<y then c=5; else c=12; 比较算符经常出现在IF语句里。 比较准则: • 数值和字符都可以比; • 结果为真赋值1,假赋值0; • 字符值从左到右逐个按ASCII码排列序列进行比较; • 缺失值参加比较时,它比任何有效值都小。
SAS算符(续) 逻辑算符
其它算符:连接字符算符“||” SAS算符(续) 例2.16 连接多个变量和常数。 data; set data.lstkinfo; result=’%a(’||stkcd||’,’||stknm||’);’; put result; run; 若要去掉连接后的字符串中的空格,可使用 Compress函数
四、直接输入建立数据集 例2.17 Data a; Input x y c & $20. date; Informat date yymmdd10. format date ddmmyy10.; Cards; 0 1 zhang xiao ming 1990-10-1 1 45 yao ming 1990-10-2 ; Run;
向数据集直接输入数据是使用input-cards(或datalines)语句;向数据集直接输入数据是使用input-cards(或datalines)语句; 一般格式: input variable-name <$>informat<w>.<d>; cards; /*提示下面是数据行,只要用数据行输入数据,必须用input-cards或input –cards4方式*/ 数据行 ;/*这个引号必须单列一行*/
例2.17中显示的三种变量输入格式: 一般数值变量:取整数、实数等的普通数值变量,可以不指明格式,默认格式是best12格式; 字符变量:取值为字符串,默认字符长度为8,变量名后要跟”$”,如果不指明长度,超过8个字符的就不能显示,例中的“&”允许字符变量值包含空格,这时,不同变量的值之间至少要隔2个空格; 日期变量:也是数值变量,为正确显示日期,必须指明输入输出格式,否则输入的日期会显示错误,没有输出格式,在数据集里只显示一个整数值; 具体输入输出格式可参见第十三章
INPUT语句的五种输入方式* input可以根据读入数据的需求给出不同的输入方式 简单方式: INPUT < specification(s)> <@ | @@>; 列方式: INPUT variable <$> start-column <-end-column> <.decimalplaces> <@ | @@>; 格式化方式: INPUT< pointer-control> variable informat. <@ | @@>; INPUT <pointer-control> (variable-list) (informat-list) <@ | @@>; INPUT <pointer-control > (variable-list) (<n* > informat.)< @ | @@>; 格式修饰符,参见P104,5.3.3; : 以空格为分隔符,值长度不一; &:字符值含有空格; ~:字符值含有引号,在infile中与DSD配合使用 列表方式: INPUT <pointer-control> variable <$> <&> <@ | @@>; INPUT <pointer-control> variable <:|&|~> <informat.> <@ | @@>; 命名方式: INPUT <pointer-control> variable= <$> <@ | @@>; INPUT variable= <$ > start-column <-end-column> <.decimals> <@ | @@>; INPUT <pointer-control> variable=informat. <@ | @@>;
具体参见第五章5.3节 选项说明
Informat与format 语句 INFORMAT语句把输入格式与变量联系起来。 语句格式: INFORMAT variables <informat><DEFAULT=default-informat>; 选项说明: 选项DEFAULT=可以出现在INFORMAT语句中的任何位置,仅适用于当前的DATA步。 没有规定临时的缺省输入格式时,使用SAS系统规定的缺省输入格式。
例2.18 规定临时的缺省输入格式。 data a; informat default=3.1 default=$char4.; input x1-x5 name $; put x1-x5 name; cards; 11 22 33 44 100 johnny ; run; 例中,在INPUT语句列出的变量X1-X5和NAME没有规定输入格式,那么使用这里规定的缺省输入格式,即用格式3.1输入X1-X5,用格式$char4.输入NAME.
例2.19 取消已存在的输入格式。 data a; set data.idx000001; informat date; run; 例中,删除变量DATE的输入格式。这里INFORMAT和SET语句的次序是重要的。
FORMAT语句 语句格式: FORMAT variables <format><DEFAULT=default-format>; 选项说明: 选项DEFAULT=可以出现在FORMAT语句中的任何位置,仅适用于当前的DATA步。 没有规定临时的缺省输出格式时,使用SAS系统规定的缺省输出格式。