第二讲 SAS 的数据存储与读取
990 likes | 1.56k Views
第二讲 SAS 的数据存储与读取. 金融学院 冯建芬 博学楼 913, 64495048 danxin_97@ahoo.com.cn. 内容提要. SAS 对数据文件的管理; SAS 逻辑库与 SAS 数据集功能及其属性 建立逻辑库,读入文件; 建立数据集,读入原始数据; 建立空数据集 直接对变量赋值建立数据集 直接输入数据建立数据集 从其他数据集导入数据建立数据集 从外部文件导入数据建立数据集 输出原始数据 输出到输出窗口; 导出的外部文件; 输出单个变量的记录;. 涉及章节. 《SAS 编程技术教程 》 第二章, 第四章, 第五章,
第二讲 SAS 的数据存储与读取
E N D
Presentation Transcript
第二讲 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.2a建立逻辑库data_1, 指向D:\ libname data_1 ‘d:\’ ; b) Test逻辑库指向e盘和f盘根目录 libname test ('e:\' 'f:\');
一、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.通过菜单操作建立其他引擎的逻辑库
课堂实践任务: 3.通过libname语句建立逻辑库:
课堂实践任务 4.建立excel表格table.xls的ODBC数据源,通过ODBC访问table表格; 5.建立锐思金融研究数据库的ODBC数据源, ftp: 202.204.164.18; 将第3个任务的程序上传至教辅平台
一、建立空数据集 • 建立空数据集 一般通过程序建立 例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-43。 无论是哪种方式,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程序的构成(续) 例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函数
课堂实践任务 1.建立空数据集 a)建立空数据集ex.class; b) 建立空数据集ex.finance_engeneering; • 建立空数据集ex.stk000001; • 建立空数据集a; • 建立空数据集b;
课堂实践任务 2. 利用x发布主机操作命令: • 在E盘根目录下建立文件夹E:\SAS\temp1; (md) • 在E盘根目录下建立文件夹E:\SAS\temp2; (md) • 删除E盘根目录下的文件夹E:\SAS\temp1; (rd) • 更改当前目录的盘符至E:\SAS\ • 列出E:\SAS\data中文件名含有stk的数据集文件;(dir E:\SAS\data\stk*. sas7bdat),并将文件名列表存储到E:\SAS\outlist.txt中。 3.为任务2的每句程序写注释;
课堂实践任务 4.通过赋值建立数据集 a) 建立数据集ex.ex2_1,内有7个变量,变量名和取值为: date: 2008年9月2日(’ 02Sep2008’d), time:2008年9月2日1点30分00秒 (’02Sep2008:13:30:00’dt); x: 3 y :3x (3*x) z: x的y次方(x**y) w: x>y k:(x & 0)
b) 建立数据集ex.ex2_2, 内有5个变量,变量名和取值分别为: r: 3.15 x:r的自然对数(log(r)); Y: 以r为半径的圆的面积(contants(‘pi’)*r**2)) a: I am 初学者; s:半径为r的圆的面积是y.(这里r,y分别是变量r,y的值)(compress(‘半径为’ || r || ‘的圆的面积是’ || y ‘.’)) 课堂实践任务
课堂实践任务 c)建立数据集ex.ex2_3, 存储3个变量c1,c2,赋值为: c1:wang min c2 : fjf c2: feng jianfen C3: feng jianfen