ThelittleSASbook学习笔记

上传人:痛*** 文档编号:113258264 上传时间:2022-06-24 格式:DOC 页数:163 大小:8MB
收藏 版权申诉 举报 下载
ThelittleSASbook学习笔记_第1页
第1页 / 共163页
ThelittleSASbook学习笔记_第2页
第2页 / 共163页
ThelittleSASbook学习笔记_第3页
第3页 / 共163页
资源描述:

《ThelittleSASbook学习笔记》由会员分享,可在线阅读,更多相关《ThelittleSASbook学习笔记(163页珍藏版)》请在装配图网上搜索。

1、The little SAS book 学习笔记第一章 SAS软件入门1.1 SAS语言许多软件要么是菜单驱动,要么是命令驱动(输入命令看结果)。SAS两者都不是,在SAS中,你用一个叫做SAS程序的一系列指令语句,这些程序可以表达出你想做的事情,并用SAS语言写下来。SAS有菜单驱动栏,比如SAS企业向导模块,它使SAS看起来像一个点击的软件,但这些模块仍然使用SAS语言为你写程序。如果你试图用SAS写下你自己的程序,那就要具备一定的灵活性。SAS 程序 一个SAS程序就是一个按顺序执行的语句序列,一个语句给SAS下达信息和指令,且必须要正确的安放。一个常用来与SAS程序做类比的例子是去银行

2、取款,你进入银行、排队、轮到你,那么你会对柜台谁你想做的事,叙述语句可能会是这样:I would like to make a withdrawal.My account number is 0937.I would like$200.Give me five 20s and two 50s.注意第一句话说了你想做的事情,之后把相关信息传递给柜台并帮你完成要求。这里信息传递的顺序不重要,重要的是在你的叙述中,首先要说明你要做什么。你不能先说:“Give me five 20s and two 50s.”这会使柜台小姐一头雾水。此外,你必须确保后面的语句都围绕第一句展开。SAS语句 像任何语言一

3、样,SAS语句的编写也需要遵守一些语法规则。幸运的是,相比英语来说,SAS语句的规则不仅少,而且简单。最重要的规则是:每一个SAS语句都由一个分号结尾听起来很简单,但即使最富有经验的SAS程序员也会偶然忘记分号。如果你能记住这个规则,再来看看另外两个规则吧。SAS程序布局 让每一条语句看起来整洁、用缩进来表现语句的各个部分,这是很有用的,但不是必须的:l SAS语句不区分大小写。l 一条语句可以持续到第二行(只要不把一个单词分开)。l 几条语句可以用一行。l 可以在任何一列中开始一条语句注释 可以在你的程序中插入一些注释,让它更容易明白。即使你插入一些你喜欢的食物品名也不会对程序有所影响,因为

4、SAS不读取注释。但不要忘记注释是为了让某人更轻松的学习你的程序,并明白你为什么这么做。*Read animalsweights from file;DATA animals;INFILEc:MyRawDataZoo.dat;INPUT Lions Tigers;PROC PRINT DATA=animals; /*Print the results*/RUN;有两种注释方法,一种是*号和;号;一种是用/* */表示,注意第二种注释方法不能放在第一列错误 SAS程序通常将执行的错误标注为醒目的红色字母,你可能忘了分号,拼错了字母,按错了键盘,一个小错误会使得整个程序无法运行。当你看到红色部分多

5、余黑色部分的时候,不要灰心。1.2 SAS数据集在你进行分析、撰写报告、对你的数据进行任何处理之前,SAS必须能够处理你的数据,你的数据必须是一种叫SAS数据集的特殊形式。因为SAS非常灵活,能够读取任何形式的数据,所以将你的数据变成SAS数据集是一件非常简单的事。变量和观测值 在传统的SAS术语中,数据包括变量和观测值。采用相关的数据库的术语,SAS数据集也被叫做表、观测值也被叫做行、变量也被叫做列,你可以看到下面这个包含一些数据的表。数据类型 未加工的数据有多种形式,但SAS将其简单化。在SAS中只有两种数据类型数值型和字符型。数值型完全是数据,可以被加减乘除、可以是正负且是小数。字符变量

6、是除数值之外的类型,可以是数值、字母、和一些特殊的字符(¥、!),最多可以占用32767个字节长度。如果一个变量既包括数字又包括字符,那么它一定是字符变量。如果只包括数字,可能是字符变量也可能是数值变量。在上面这个表中,姓名是字符变量,身高和体重是数值变量,ID,既可能是数值有可能是字符,依据你的选择。缺失值 数据有时会有些不完美,某些变量的个别观测值会缺失。字符变量的缺失值用空格表示,数值变量的缺失值用句号(.)表示。上表中,体重的第五个观测值缺失,用.表示。姓名的第六个观测值缺失,用空格表示。SAS数据集的大小 在SAS 9.1之前(prior to SAS 9.1),SAS数据集可以包含

7、32767个变量,从SAS 9.1开始(beginning with SAS 9.1),SAS可包含的最多变量数由你的电脑可用资源决定(内存,CUP?)。但是超过32767个变量的SAS数据集不能用在早期的SAS版本上。SAS命名规则 为你的变量和数据集命名,使它们容易被辨别。A,B,C这样的名字可能看起来很完美,写程序的时候也很方便,但当你6个月后再使用这些数据时,你会发现name,height,weight这样的名字更有用。为变量和数据集命名时要遵守如下规则:l 名字的长度要小于等于32个字节。l 以字母或下划线开头。l 可以包含字母、数字、或者是下划线,不能是%$!*&#。l 可以是小写

8、或大写字母,且不区分大小写。SAS数据集储存的文件 SAS数据集包含了一些类似名称、创建日期、创建用的SAS版本等信息。SAS也储存了每个变量的信息,包括名称、类型、长度、数据集中的位置。这些信息叫做数据集的描述部分,它使得数据集可以自我编制(self-documenting)。1.3 SAS程序的两个过程SAS程序有两个基本模块:数据步和过程步。一个典型的SAS程序,由数据步创建SAS数据集开始,再由过程步分析数据。这里有一个例子:数据步中将米转化成千米,过程步中输出结果数据步和过程步由语句组成(废话),一个过程少至1条语句、多至几百条。新手常犯的错误是将两种过程语句用混,只要记住数据步负责

9、读取、修改数据,过程步负责分析数据、输出报告和效用函数,就不会犯错。数据步由DATA语句开始:data+数据名。上例中数据步处理了名为distance的数据。为了读取外部数据、未加工的数据,数据步提供了DO LOOPS,IF-THEN/ELSE,以及一些数值和字符函数。数据步也可以按照你想要的方式合并数据集,包括联接(concatenation)和合并(match-merge)。过程步由proc语句开始:proc+过程名(print、sort、means),SAS过程步可以处理从数据储存、输出到方差分析、3D图表的一切操作。当程序遭遇DATAPROC等标志着新程序开始的语句时,程序结束。如果运

10、行的是批处理,则run代表语句的结束。Run告诉SAS去执行所有之前的程序行,全局变量不是DATA或PROC过程的部分。上图的那个程序,当proc出现时,代表data过程结束。典型的程序是以DATA语句开头,输入或修改数据,然后将数据传递给PROC语句。但并不一定非要用这种模式来混合data和proc语句,你可以用任何顺序来排列data和proc两者的顺序,一个程序甚至可以仅有data语句或proc语句。下表是data语句和proc语句的一些基本不同点:这只是一个简化表,SAS软件非常灵活,所以data语句和proc语句之间真正的区别也是很模糊的。记住,这个表并不是说proc语句永远不能创建S

11、AS数据集,或者DATA语句永远不能够分析生成报告。1.4 数据步的内置循环Data步读取并修改数据,让你以灵活的方式控制处理数据。Data步也有一个潜在的、内置的循环语句。你不用告诉SAS去执行这个循环,SAS会自动执行。数据步按照一行一行、一个观测值一个观测值的顺序执行这句话的表意并不明确,许多新手直到成了老手都没明白这句话的含义。数据步“一行一行的执行”,这句话很好理解。但很多新手还是容易在这里出错,例如在没有创建一个变量之前就使用它,如果Z变量是X、Y两个变量组合的新变量,那么必须确定创建Z变量的语句在创建X、Y变量语句之后。而“一个观测值一个观测值的执行”就不是那么容易理解。这意味着

12、SAS先读取一个观测值,然后对这个观测值进行数据步的所有语句(当然也是一行一行的),然后再读取第二个观测值执行。每次执行SAS只有一个观测值。我们将SAS执行的图景放慢:SAS从你的数据集中读取一个观测值。SAS对你的这个观测值执行数据步,如果数据步一直运行到结束而没有错误,SAS会把当前的观测值写入一个新的、输出数据集中,并返回到数据步开头,读取第二个观测值进行执行。当最后一个观测值都被写入输出数据集中之后,SAS结束数据步,进入下一个步。有一个类比,数据步就象是一个投票程序。当你来到投票的地点,你会站在别人后面进行排队,排到你时,你会被问到:你叫什么名字,住在哪里。当你回答之后,你可以投票

13、。在这里,排队的人就像是观测值,投票的程序就像是数据步。一次只能让一个人投票,每个人都相互独立。并且投票的程序是一步一步来的,你不能没说明自己的姓名和住址之前就投票。1.5 选择一个提交程序的方式目前为止我们讨论了写SAS程序,但仅仅写不能带给你任何结果,你必须要提交并执行。有数种方法可以执行SAS程序,但不是任何方法都适合于你的操作环境。查找一下SAS帮助文档,或者咨询下你的SAS顾问,看看哪种方法适合你的操作环境。SAS视窗环境如果你使用SAS是按照系统提示,或者是点击SAS的图标,那么你适合使用SAS视窗环境。在这种交互式的环境中,你可以写入、编辑SAS程序,提交处理、浏览、输出结果的S

14、AS程序。此外,视窗有许多功能可以处理不同的任务,如管理SAS文件、定制界面、访问SAS帮助文档、导入和导出数据。你的视窗环境的界面取决于你电脑的的类型、使用的终端、电脑操作系统和启动SAS时实际的选择。如果你使用的是个人电脑,那么SAS视窗环境的感觉和其他软件类似。SAS企业向导如果你有SAS企业向导软件,这个软件在windows下即可运行。你可以用这个软件提交程序:使用插入菜单打开代码窗口,输入序或打开现有SAS程。之后你可以用本地电脑、或者在远程服务器上(需要安装)运行SAS程序。非交互式模式非交互式模式是SAS程序语句已先存于你系统的文件中,直接执行那个文件。非交互式模式可以让SAS立

15、即执行程序,通过某个指令开始($),后接文件名,如:$ SAS Myfile.sas批处理或后台模式在批处理或后台模式下,你的程序存于一个文件中,SAS会自动执行,你不需要在电脑旁,如果程序多,SAS会将这个程序进行排队等待。这种模式通常用在大型电脑中,因此通常可以一次性处理多个任务。批处理或后台模式的成本比较低,适合于大型工作,工作完成后,结果会存于文件夹中,你可以任何时候输出查看。批处理未必适合你的操作环境,另外提交方式也会有不同,最好查看SAS帮助文档,或咨询SAS顾问。远程提交如果你安装了CONNECT模块,可以进行远程提交,即在一台电脑上(本地)编写程序,在另一台电脑上(远程)处理,

16、结果会返回本地电脑。当你处理大型任务,而你的电脑性能又不够时,可以连接到远程的高性能电脑上,也可访问远程电脑的分享文件。交互行模式交互行模式下,SAS每次提示用户输入一个语句,想改正输入的语句不是那么容易的。因此除非你足够优秀和熟练,否则最好不要用这个模式。你可以用endsas并回车来退出这个模式:Endsas;如果你想知道为什么会进入这个模式,并且在以后避免进入,你需要咨询SAS顾问。1.6 SAS视窗环境中的视窗和命令SAS视窗 SAS有五种基本的视窗(窗口):结果视窗、资源管理器视窗、和三种程序视窗:程序编辑、日志、输出。除此之外,在获得SAS帮助、改变SAS系统选项、定制SAS人机会话

17、等情况时,可能还会用到其他的视窗,下图显示了Microsoft Windows SAS会话中默认的视图:编辑窗口 编辑窗口中你可以输入、编辑、提交SAS程序。Windows操作环境默认的是增强型编辑窗口,它对语法更敏感,并用颜色标注程序,使得更容易理解和发现错误。其他操作环境默认的是程序编辑窗口,并随操作环境和SAS版本的不同,界面特征也不同。日志窗口 日志窗口是关于SAS会话的说明。在提交SAS程序之后,任何的说明、错误、警告和程序语句都会显示在日志窗口上。输出窗口 如果程序产生需输出的结果,那么会反映在在输出窗口中。结果窗口 结果窗口就像输出窗口的一个目录表,以提纲形式列出了输出的每一个部

18、分。探索窗口SAS命令SAS命令是为了不同的任务,你有三种方式发出命令:菜单、工具栏、SAS命令栏,如下图:菜单 (大部分操作环境都会有一个下拉菜单要么在窗口上方要么在屏幕上方.oh my god!略)工具栏(不是所有的操作环境都有工具栏略!)SAS命令栏 可以在这里输入SAS命令,一些操作环境中,命令栏坐落在工具栏中,另一些操作环境中,每个SAS窗口都有一个命令行(command line),通过语句command=激活。大部分命令是可以直接用菜单进行选择的。控制你的视窗 你可以通过菜单、命令栏、点击的方式激活任何一种程序窗口1.7 在SAS视窗环境中提交程序将你的程序放入编辑窗口中 你可以

19、通过输入,或者打开现有程序文件的方式将程序放入编辑窗口中。打开现有的程序文件,可以通过菜单-打开,也可以通过工具栏的图表,或者直接将文件拖放到编辑窗口中。提交你的程序 你有几种方式来提交程序:使用工具栏的提交图表激活命令栏,输入submit命令回车。从run运行的下拉菜单中选择submit提交左图显示了如何在windows视窗中提交增强型编辑窗口的程序。访问SAS日志和输出 提交程序后,日志窗口和输出窗口会有相应的日志和结果显示,如果你使用的是增强型编辑窗口,之前的程序会保留,如果使用的是程序编辑窗口,之前的程序不会保留。如果你的程序产生了输出,那么结果窗口会显示这些输出的目录,下图是一个例子

20、,显示了提交程序之后,增强型编辑窗口、日志窗口、结果窗口、输出窗口的样式。取回你的程序 如果不幸你的程序出现了问题,你需要再次运行,对于程序编辑窗口,由于之前的程序不在保留,因此需要调回命令(recall),有两种方法:命令窗口中输入recall激活编辑窗口,从运行(run)下拉菜单中选择如果不停的使用recall命令,SAS可以一直往前调回程序,知道所有提交的程序都被调回。1.8 阅读SAS日志在哪找到SAS日志 SAS日志窗口的位置随着你使用的操作环境、选择的模式(视窗、非交互、批处理)、个人的设置的不同而不同。在视窗模式下,提交程序之后,日志窗口默认的位置如下图:对于批处理和非交互模式的

21、日志则会被写入一个文件中,你需要使用操作环境的命令来查看,一般日志文件的名字与对应的SAS程序名一直,如你的SAS程序命为abc.sas,那么日志文件的命则为abc.log日志包含的内容 日志中虽然有很多琐碎,但也包含了重要的信息。这里有一个将英里转换为千米的程序:*Create a SAS data set named distance; *Convert miles to kilometers; DATA distance; Miles=26.22; Kilometers=1.61*Miles; *Print the results; PROC PRINT DATA=distance; R

22、UN;运行之后,SAS的日志窗口会产生一个类似这样的日志: 说明了你使用的SAS版本和site。 是原始的SAS程序语句 说明了数据步为你创建的数据集名称,观测值数和变量数。它可以帮助你确认你的程序没有丢失观测值,也没有创建你不需要的变量。 这部分显示了数据步和过程步占用的电脑资源。当你使用的是多用户系统,或者处理大型数据而使得SAS运行占用大量时间时,这部分信息可以帮助你检查哪一步比较耗时。如果SAS程序出现错误,错误信息也会反馈在日志窗口中,说明哪里出错及出错表现。1.9 输出窗口中浏览结果你使用的模式不同,产看输出结果的方法也会不同。如果是在视窗模式下提交SAS程序,那么直接在输出窗口查

23、看,如果是批处理和非交互模式下,那么结果就会保存在一个文件里,需要用命令查看。比如使用UNIX系统下的非交互模式,结果会存在一个后缀为.lst的文件里,使用cat或其他更多命令来查看。输出窗口 提交程序后,结果会出现在输出窗口中,下图是一个输出窗口的例子打印或保存输出窗口的目录 激活输出窗口的目录,在菜单栏文件(file)下拉菜单中选择打印(print)或保存(save)即可。结果窗口 结果窗口起到输出窗口的目录作用,当你的输出结果非常多时,结果窗口很有用。它可以让你很清楚的看到输出结果的每一部分。下图是一个方差分析(ANOVA)过程的结果。在这个图中,左边是输出结果的目录,点击+号将其展开,

24、可以看见ANOVA结果的各个部分,双击某一部分,则该部分结果就会位于输出窗口顶部。打印或保存部分输出 如果要打印结果窗口中显示的某一部分的输出,则需将鼠标移到该部分上,右击,选择打印或保存即可。或者点击一下,使其黑亮,再从菜单栏文件(file)的下拉菜单中选择输出或保存。1.10 创建HTML输出如果使用的是SAS视窗环境,那么可以为结果创建超文本标记语言(HTML)格式。参数选择窗口 选择菜单栏中工具(tools)下拉菜单的选项(options)-参数选择(preferences)。选择结果(result)选项卡,如下图所示:这个参数选择窗口上,有一个“创建列表(create listing

25、)”选项,默认的输出就是列表输出。下面还有“创建HTML”选项,用来创建HTML。样式(style)选项用来为HTML选择一个风格样式。选择之后,点击OK。结果浏览窗口和结果窗口 (注意下面提到的三种窗口:结果浏览窗口result viewer,结果窗口results window,输出窗口output window)一旦选择了HTML输出,每次运行程序的时候都会自动出现一个结果浏览窗口(result viewer),下图显示了在运行了一个均值和输出的程序后,出现两个窗口:结果浏览窗口显示HTML输出,结果窗口显示输出的目录。结果浏览窗口一次只显示输出结果的一个部分,通过选择结果窗口的目录,可

26、以查看其他的部分。值得注意的是,结果窗口给出的目录中,每一个部分都给出了两种相同的目录,一个是链接到输出窗口,一个是链接到结果浏览窗口保存结果浏览窗口的输出(output of result viewer)的方法:激活结果浏览窗口,选择菜单栏文件(file)下拉菜单的保存(save as)、输出(print)。可以在style中为输出选择不同的风格,如下图就是D3D的风格:1.11 SAS数据的逻辑库SAS逻辑库库只是数据集文件存放的地点。打开SAS视窗模式后,会看到SAS资源管理器窗口(explore),双击逻辑库图标,资源管理器窗口会显示出所有已定义的图标。要返回前一级窗口,选择查看(vi

27、ew)-向上一级(up one level),或者在工具栏中直接点击向上一级图标逻辑库窗口 打开逻辑库窗口后,除了自己创建的库外,至少会呈现三个逻辑库:sashelp,sasuser,和work,如果安装了某些SAS模块,还有一些特别的逻辑库,比如SAS/GRAPH模块的Maps逻辑库。Sashelp包含了控制SAS会话以及样本数据集的一些信息。WORK是sas数据集的临时储存地点,创建的数据集如果没有指定库,则默认储存在这里,关闭程序时则自动删除数据集。也可以更改默认的库,从而不是临时库。创建新逻辑库 创建新逻辑库有两种方法:在逻辑库窗口中选择文件(file)下拉菜单的新建(new);或者直

28、接右键新建。在新建逻辑库(new library)窗口中,为你的逻辑库起一个名字,这里叫做Mylib,指定库的存放路径。如果不想每次启动SAS都要调用这个库,则勾选启动时启用(enable at startup)即可。这是一个新建的Mylib逻辑库的视图。1.12 用SAS资源管理器访问SAS数据集可以利用SAS资源管理器打开数据集、浏览、编辑,也可以列出数据集的信息,如创建时间和变量名。目录窗口 打开一个逻辑库,进入一个目录窗口,显示这个库中所有的文件和文件夹。右图的目录窗口中显示Mylib逻辑库有三个文件:Customers,Models,orders。双击某文件,则可以打开这个文件的可视

29、视图。可视视图 这个窗口允许你创建、浏览、编辑数据集。列出SAS数据集的属性 用资源管理器还可以列出SAS数据集的一些属性情况,右击某文件,选择下拉菜单的属性(properties)属性窗口显示了SAS数据集的属性信息,如创建时间、行列数等。如果选择列(columns)选项卡,则出现数据的列信息1.13 使用SAS系统选项SAS系统选项是影响SAS运行的一些参数,比如输出的显示、内存的占用、错误的处理等问题。这些小问题由SAS为你设定好,你也可以改变它。SAS系统选项的参数不是所有都适合你的操作环境,适合于你的再SAS的帮助文档中给出。可以通过打开SAS系统选项窗口或使用option程序来查看

30、你的SAS系统参数。Option程序的语句如下:Proc options;Run;有四种方法可以指定系统选项的参数,SAS帮助文档会告诉你哪种适合你的操作系统:1. 系统管理员会创建一个包含了系统选项设定的配置文件,每次SAS启动时都会访问这个文件。2. 在启动SAS之后,根据系统提示指定系统选项。3. 如果使用SAS视窗环境,可以从SAS系统选项中改变已选择的选项。4. 使用OPTIONS语句。这四种方法按照优先性排列,方法2优先于方法1,方法3优先于方法2,方法4优先于3。如果使用SAS视窗环境,方法3,4最好。OPTIONS语句 OPTIONS语句是SAS程序的一部分,并可影响之后的所有

31、语句。由OPTIONS关键词开头,后面是相关选项。比如:OPTIONS LINESIZE=80 NODATE;OPTIONS语句既不属于数据步也不属于过程步,这个全局变量可以出现在程序的任何部分,但放在开头最有意义,你可以很容易看到哪些选项在发挥作用。如果OPTIONS语句只出现在数据步或者过程步中,那么它会影响那个过程,和下面的过程(If the OPTIONS statement is in a DATA or PROC step,then it affects that stepand the following steps.)。注意,后面的OPTIONS语句会覆盖前面的,即以后面的OP

32、TIONS为主。SAS系统选项窗口 通过这个窗口也可以改变系统选项。可以通过在命令栏中输入“OPTIONS”,或从工具(tools)下拉菜单中选择. 窗口出来后,找到要修改的部分,右击修改值(modify the value)即可。一般选项 下面是一些可能用到的一般系统选项CENTER|NOCENTER输出是否居中,还是左对齐。默认居中DATE|NODATE今天的日期是否出现在输出的顶部。默认输出LINESEZE=n控制输出行的最大长度,n可能的值为64到256NUMBER|NONUMBER输出的页面页码是否需要。默认需要。ORIENTATION=PORTRAIT;ORIENTATION=LA

33、NDSCAPE;指定打印输出的方向。默认竖向(portrait)PAGENO=n输出页开始的页面。默认为1PAGESIZE=n每个页面输出的最大行数。可能的值为15到32767RIGHTMARGIN=nLEFTMARGIN=nTOPMARGIN=nBOTTOMMARGIN=n指定打印输出的边缘大小。默认0.00英寸(Specifies size of margin(such as 0.75in or 2cm)to be used for printing output.Default:0.00in.)YEARCUTOFF=yyyy设定起始年份第二章 将你的数据放入SAS2.1 将你的数据放入S

34、AS的方法你可能有各种形式的数据,包括手写在纸上、存放在电脑上、或是在数据库管理系统里,不论如何,总有一种方法可以让SAS来读取。SAS读取的数据的方法主要有以下几种类型:l 直接输入;l 从原始数据文件中创建一个SAS数据集(creating SAS data sets from raw data files);l 将其他软件中的数据文件转换成SAS数据集;l 直接读取其他软件的数据集;直接输入 l Viewtable窗口可以让你以表格形式输入数据,可以定义变量、设置属性,如name、length和 type(character or numeric).l SAS 企业向导模块,a Wind

35、ows only application,has a data entry window that is very similar to the Viewtable window.As with Viewtable,you can define variables and give them attributes.l SAS/FSP 模块,是Full Screen Product的简称,可以设计定制的数据输入窗口,也有检测数据输入错误的功能(The SAS/FSP product is licensed separately from Base SAS software.)。从原始数据文件中创

36、建一个SAS数据集 你有两种方法读取原始数据文件:l 数据步可以读取任何形式的原始数据文件,这种方法还将在2.4中详解。l 导入向导(Import Wizard)、导入过程(IMPORT procedure)适用于UNIX、OpenVMS和 Windows操作环境的简单方法,可以读取CSV(comma-separated values)和其他一些限定的文件类型。将其他软件中的数据文件转换成SAS数据集 如果数据在一个软件中以某种格式存放,但需要用另一种软件分析时,就会很麻烦。有几种方法可以将某种软件中的数据转换成SAS数据集:l 如果安装SAS/ACCESS模块,可以用导入过程(import

37、procedure)和导入向导(Import Wizard)将Excel、Lotus、dBase和Access文件导入SAS数据集,见2.3和2.17(?)。l 如果没有安装,可以用存放数据的软件创建一个原始文件,并用数据步或导入过程(import procedure)读取。很多软件都可以创建CSV文件。l Windows操作环境下也可以用动态数据交换技术(Dynamic Data Exchange,DDE),见2.18。前提是必须有一个其他的Windows程序与SAS同时运行,再使用DDE和数据步。直接读取其他软件的数据集 l SAS/ACCESS产品可以不用转换数据格式读取数据,并适用于大

38、部分大部分数据库管理系统,包括ORACLE,DB2,INGRES和 SYBASE(但使用方法本书没有介绍)。l 使用Excel engine和Access engine来读取这两种类型的数据。(SAS帮助文档)l 还有其他的一些数据引擎(data engines)来读取数据,如SPSS engine(附录D),查找帮助文档找到适合你操作环境的所有有效engine。2.2 用Viewtable窗口输入数据调用Viewtable窗口,在工具栏的下拉菜单中选择表编辑器(Table Editor)。列属性窗口 每一列顶部的字母是默认的变量名,右击变量名,即可打开列属性(column attribute

39、s)窗口,设置属性之后,点击应用(apply),设置完后关闭即可。输入数据 保存表 选择文件(file)另存为(save as),选择一个逻辑库保存,如果想保存在新的逻辑库,点击创建新逻辑库图表(New Library),输入逻辑库的名字和保存路径。打开一个已有的表 首先打开表编辑器,选择文件(file)打开(open)。打开之后,SAS默认的是浏览模式,如果要对数据进行编辑,则要在编辑(edit)菜单中选择编辑模式。也可以在资源管理器窗口中双击打开一个已有的表。其他功能 其他一些功能包括排序、打印(printing)、增加和删除行、一次浏览一行(窗体视图Form View)、一次浏览多行(表

40、视图 Table View)。图标和菜单都可以选择这些功能。在SAS程序中使用表 如下程序语句可以将表内容输出打印:PROC PRINT DATA=Sasuser.coffee;RUN;2.3 用导入向导(Import Wizard)读取文件导入向导会浏览你的文件以决定变量的类型,并默认数据表的第一行存放变量名。第一步,从文件(file)下拉菜单中选择导入数据(import data)导入向导(Import Wizard)第二步,从standard data sources中选择要导入的数据类型。以comma separated values(*.csv)为例。点击下一步第三步,指定要导入的文

41、件位置,SAS默认第一行存放变量名,从第二行开始存放数据。Options可以改变这种默认选择。第四步,选择数据集要存放的逻辑库,并为数据集取一个名字(member)最后,导入向导创造一个proc import语句,可以是SAS再次导入这个数据。另外,对于一些类型的数据文件还有额外的步骤,比如Microsoft Access文件,你需要输入数据库名和药导入的表名,有时甚至还要输入user的ID号和密码。在SAS程序中使用导入数据 比如你将数据存放在work逻辑库,并署名为flowers,那么你可以这样来输入它:PROC PRINT DATA=WORK.flowers;RUN;由于work是默认的

42、逻辑库,所以也可以直接这样:PROC PRINT DATA=flowers;RUN;2.4 告诉SAS你的原始数据在哪如果数据是原始数据(比如text,ASCII,sequential,flat files),那么用数据步来读取能带给你最大的灵活性。但首先你要告诉SAS你的原始数据在哪。原始数据可以通过文本编辑器(text editors)或系统命令。对PC使用者来说,原始数据没有相关联的应用程序(就像doc文件与word相关联,双击doc程序就默认调用word程序以打开),有时他们会与像Microsoft Notepad这样的简单编辑器相关联。内部原始数据 如果直接将数据输入SAS程序中,那

43、么数据就是SAS内部数据。DATALINES是一个指示,告诉SAS下面跟着是数据行,直到分号结尾,这个分号可以另起一行,也可以接在数据的后面。也可以用card代替DATALINES。下面是一个程序,这个程序创建了一个USPRESIDENTS数据集。(Input语句还将在2.5和2.15中讨论)外部原始数据 数据外SAS程序外部时,使用INFILE语句告诉SAS外部数据的文件名和存放路径,它在data语句之后,在INPUT语句之前。INFILE后面的文件名和路径要用引号,各种系统的引用方式各不同:假设有一个President.dat数据在你的C盘的MyRawData目录中,那么可以用如下方式引用

44、这个外部数据:SAS日志 读取外部数据时,SAS日志会给一些很有用的信息,检查这些信息可以解决一些问题,比如对比INFILE语句读取的记录数和数据集中实际观测值,可以确定SAS是否正确的读取了数据。上面程序的日志如下图所示,过长记录 在一些操作环境中,SAS假定外部数据文件的记录长度为256或更少(记录长度是指某行中的字符数,包括空格),如果长度过长,SAS不能读取全部,此时需要在INFILE语句中使用LRECL=来指定长度,这个长度必须是数据中最长行的长度,如:INFILEc:MyRawDataPresident.datLRECL=2000;可以通过SAS日志来查看最大记录长度。2.5 li

45、st input读取空格分开的原始数据如果原始数据都至少被一个空格分开,那么用list input读取数据可能是正确的。List input是一个很简单的读取数据的方式,但是会受到很多限制。你必须读取所有的数据记录,不能跳过某些值、缺失值必须用句号“.”代替。字符串数据不能包含空格、长度不能超过8个字符。而且如果数据文件包含日期变量或者其他需要特别处理的变量,list input将不再适用。虽然很多限制,但仍有大量的文件可以用这种方式读取。INPUT语句是数据步的一部分,它告诉SAS如何读取原始数据。使用List input来写input语句:在INPUT关键词之后列出变量名(按照变量在文件中

46、出现的顺序),变量名长度在32个字节(含)以下,只能包含字母、下划线和数据,并必须以字母或者下划线开头。如果变量是字符串,后面要价“$”号,值与值之间至少有一个空格,语句要以分号结束。如:这表明输入三个变量,其中name是字符串,age和height是数值变量。例子 你想组织一次青蛙跳跃比赛,现在你记录了每只参赛青蛙的名字、体重、和三次跳跃的距离,如果某次的跳跃距离不合格,那么就用“.”代替,数据文件ToadJump.dat形式如下:虽然不是很整洁、但满足list input的所有要求(字符串长度小于8个字节、不包含空格、值之间都有至少一个空格,缺失数据也用句号代替)。Nosiy的数据溢出到第

47、二行了,但这不影响,SAS会按照变量顺序自动跳到下一行读取。如下是读取这个数据的SAS程序:Input后面是变量名,ToadName是字符串变量,其他是数值变量;proc print过程用来输出数据集中所有的变量和观测值;title语句用告诉SAS输出顶部的标题,如果不指定标题,SAS将以“the SAS system”作为标题在每一页的顶部。输出的形式如下:由于Noisy的数据溢出到下一行,因此下面的说明会出现在SAS日志上:2.6 column input读取按固定列排列的原始数据当一些原始数据的值之间没有空格分开,或者没用用句号代替缺失值时,list input就不能用。但当每个变量的值

48、都出现在数据行的相同位置时,并且变量值是字符串或者标准数值(只包含数据、小数点、正负号、和科学标注的E。逗号和日期都不能算)时,可以使用column input来读取。相比list input,column input有如下优势:l 不要求变量值之间的空格;l 缺失值可以直接用空格代替;l 字符串中可以包含空格;l 可以跳过不需要的变量。调查数据使用column input,因为调查答案的记录都是用单个数字(0-9),如果每个答案之间再用空格分开,就会使整个文件会扩大两倍。有地址的数据文件也使用 column input,因为地址之中常常包含空格,比如街道Martin Luther King

49、Jr.Boulevard在column input中就可以当成一个变量而不是五个。可能用column input读取的数据也可以用formatted input读取或者几种方式组合。Column input的input语句格式如下:input关键字后接变量名、再接变量的列位置(列位置是字符或者数值在一行中的位置)。字符串变量名后仍要用“空格+$”,变量名之间仍要用空格隔开。示例如下:这个语句表明,Name变量,在行中占据第1列第10列,为字符串变量,age占据第11-13列,为数值变量,height占据第14-18列,数值变量。例子 原始数据记录如下:读取这个数据的column input程序

50、如下:第一个变量visitingteam占据第1-20列,为字符变量;concessionsales占据第21-24列,为数值变量,下面几个变量均占据固定的列。输出结果如下:2.7 informats读取非标准格式的原始数据有时候原始数据不全是字符串或者数值,比如类似1,00,001这样包括逗号的字符串值,电脑就不能读取,其他诸如包含美元符号、十六进制、压缩十进制的数据都是非标准数据。SAS中,informats可以用来告诉电脑如何读取这样的数值。日期是最普通的非标准数据,SAS informats会把类似10-31-2003或者31OCT03转换成数字,日期的起点为1960年1月1日,即这一

51、天的数字为0。Informats的三种普遍格式为:字符串、数值、日期。这三种格式的形式如下:$代表是字符串、informats代表形式(比如日期的MMDDYY)、w是宽度、d是小数点的位数、最后是句号“.”,缺少句号会使得SAS把形式(如MMDDYY)当做变量名。一个简单formatted input的简单INPUT语句如下:Name为字符串变量,占据10个宽度,即列位置从1-10;age为数值变量,占据3个宽度,列位置从11到13;height也为数值变量,占据5个宽度,包括了1位小数点和小数点本身,列位置从14-18(如150.3);最后是日期变量,从第19列开始,形式为MMDDYY。例子

52、 原始数据如下:读取这个数据的informat程序如下:年龄后面的+1代表跳过一列,即原始数据中年龄后面有一个空格。最后的5个变量score1-score5,都要求有同样的形式,4.1。将变量名和形式分别放在两个括号集中,可以一次性定义很多变量。输出结果如下:2.8 可选择变量形式一般使用的变量形式的定义,以及它们的宽度范围和默认宽度如下:2.9 混合读取方式每种数据读取方式都有其优势,list最简单,column和formatted虽然复杂但是不要求变量之间的空格,并且变量名中可以包含变量,而且formatted可以读取特殊的数据比如日期。SAS可以灵活的让你搭配不同的读取方式,以达到最大的

53、方便。 例子 如下的原始数据记录了美国国家公园的信息:姓名(name)、所属周(state)、建立时间(year established)、占地面积(size inacre):有多种方式进行数据读取,下面的程序是方式之一:其中ParkName是column方式读取,State和Year是list方式读取,Acreage是formatted方式读取,输出结果如下所示:混合读取方式有时会遇到问题:SAS通过一个指示器标注位置,来读取原始数据的一行,但每种读取方式对指示器的使用稍有不同。List方式下,SAS自动找到非空格区域并开始读取;column方式下,SAS读取你所指定的特定位置;inform

54、atted方式下,SAS不理会指示器的标准,只是依次的读取。这时,就会需要列指示器n,来人为的让SAS的读取直接跳至某列。在上面的程序中,列指示器40告诉SAS在读取Acerage变量之前,移动到第40列去,如果移去指示器,程序为:输出结果如下图所示:之所以出现这样的结果,要看原始文件的列坐标排列:Comma9告诉SAS读取9列,SAS就会读取包括空格在内的9列,这便会导致输出结果的问题。2.10 读取凌乱的原始数据有的数据排列混乱,长度不一。这样的数据需要新的工具处理:character 列指示器和colon modifier。character 列指示器 2.9中提到column列指示器可

55、以让SAS直接从某列开始读取数据。但有时候你不知道要读取的数据是从哪列开始,此时你只要知道要读取的数据的前面那个字符或单词即可。比如有一个关于狗的原始文件,你想要读取狗的品种号,但文件排列很凌乱,只知道品种号跟随在单词breed后面,那么可以用如下方式读取:Input Breed: DogBreed $;colon modifier 由于input读取字符串变量默认为8个字符,因此在上例中如果狗的品种名(dogbreed)超过8个字符,则需要定义长度,定义为$length,在该长度中,空格也算在内。如果要使SAS读取过程中遇到空格则不再继续读取,则要在$length前面加冒号“:”。比如原始数

56、据中有这么一行:My dog Sam Breed:Rottweiler Vet Bills:$478如果用上述不同方法读取,会有不同结果:例子 web日志是凌乱数据的一个很好例子,下面是一个网站的web日志,数据开始于访问IP,后面有访问日期、访问文件名等信息。现在想要读取访问日期和访问的文件名,但是它们每行中所占据的列的位置都不同,而且文件名的长度每行都不一样,那么SAS读取这种文件通过如下方式:作为列指示器,告诉SAS读取之后的内容,GET告诉SAS读取GET之后的内容,由于文件名作为字符串变量,这里基本都会超过8个字节,因此后面附加:$20。输出结果如下:2.11 跨行观测值的读取方式一

57、般原始文件中一行代表一个观测值,有时会出现一个观测值跨行的情况。由于SAS会自动转到下一行读取数据,直到读取这个观测的所有变量(input语句中给出),所以你需要告诉SAS什么时候不要换行,以便在日志中不出现SAS-went-to-a-new-line的暂停说明,此时需要在INPUT语句中加行指示器。(?)行指示器,斜线/:告诉SAS跳至原始数据的第二行;#n:跳至第n行,n代表原始数据中某观测值的行数(#2则让SAS跳至某观测值的第二行),#n不能用来回跳。例子 有一组关于温度的数据,temperature.dat第一行代表城市和州,第二行代表本日最高温和最低温,第三行代表史上最高温和最低温

58、。用如下的程度来读取这份数据:Input后面告诉SAS读取第一行的city变量和state变量,斜线/告诉SAS移动到下一行的第一列,以便读取normalhigh和normallow。#3告诉SAS移动到第三行的第一列以便继续读取观测值的recordhigh变量和recordlow变量。这里/可以用#2代替,也可以用/代替#3。日志记录如下:从日志中可以看出,虽然原始原件占了9行,但只有三个观测值。输出结果如下:2.12 一行有多个观测值的原始文件读取当一行出现多个观测值时,可以在input语句结尾加一个停止符号例子 有一个关于降水量的数据,precipitation.dat,文件包含城市名、

59、州名、月平均降水量、月平均降水天数:这个数据文件中,第一行包含了两个观测值,可以用的程序读取:日志记录如下:中间的说明,SAS went to a new line when INPUT statement reached past the end of a line.是指读取第二个值时达到第一行末尾,并转到下一行继续读取。通常这些信息会预示一个问题出现,但在这里它们都是你所想要的(为什么?)输出结果如下:2.13 读取原始数据的部分观测值有时候只需要读取原始数据的部分观测值,比如只需要年鉴中的女性数据、收入超过10万的人口数据等。此时的数据读取方式如下:在SAS读取某一行观测值时,首先读取足

60、够的变量以便决定是否需要保留此行的观测值。然后在input语句结尾加符号,叫做a trailing at(called a trailing at),这告诉SAS先停在(hold)此行,同时用IF语句检测此观测值是否满足需要,如果是,那么可以再用一个input语句来读取现有的变量。例子 有一个关于当地交通的数据,traffic.dat数据包含街道的类型(freeways和surface)、街道类型、早晨每小时的机动车流动量、晚上每小时机动车流动量。如果现在你只需要freeway的数据,可以用下述程序:第一个input读取字符串变量,是SAS停留在观测值上并用IF检测,第二个input读取input后面的变量值。程序执行后日志包括两部分说明,一个说明读取了8个记录,另一个说明新数据集中只包含三个观测值。输入结果如下所示: vs 的作用类似于,都是行停留指示符(line-hold specifiers),不同地方在于停留多久,能使SAS停留到下一个input语句(也不换行),能使停留的时间到下一个data步(也不换行)。比如这段代码:data test;

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!