SAS语言抛砖引玉Beta版.docx

上传人:b****7 文档编号:15576578 上传时间:2023-07-05 格式:DOCX 页数:82 大小:94.86KB
下载 相关 举报
SAS语言抛砖引玉Beta版.docx_第1页
第1页 / 共82页
SAS语言抛砖引玉Beta版.docx_第2页
第2页 / 共82页
SAS语言抛砖引玉Beta版.docx_第3页
第3页 / 共82页
SAS语言抛砖引玉Beta版.docx_第4页
第4页 / 共82页
SAS语言抛砖引玉Beta版.docx_第5页
第5页 / 共82页
SAS语言抛砖引玉Beta版.docx_第6页
第6页 / 共82页
SAS语言抛砖引玉Beta版.docx_第7页
第7页 / 共82页
SAS语言抛砖引玉Beta版.docx_第8页
第8页 / 共82页
SAS语言抛砖引玉Beta版.docx_第9页
第9页 / 共82页
SAS语言抛砖引玉Beta版.docx_第10页
第10页 / 共82页
SAS语言抛砖引玉Beta版.docx_第11页
第11页 / 共82页
SAS语言抛砖引玉Beta版.docx_第12页
第12页 / 共82页
SAS语言抛砖引玉Beta版.docx_第13页
第13页 / 共82页
SAS语言抛砖引玉Beta版.docx_第14页
第14页 / 共82页
SAS语言抛砖引玉Beta版.docx_第15页
第15页 / 共82页
SAS语言抛砖引玉Beta版.docx_第16页
第16页 / 共82页
SAS语言抛砖引玉Beta版.docx_第17页
第17页 / 共82页
SAS语言抛砖引玉Beta版.docx_第18页
第18页 / 共82页
SAS语言抛砖引玉Beta版.docx_第19页
第19页 / 共82页
SAS语言抛砖引玉Beta版.docx_第20页
第20页 / 共82页
亲,该文档总共82页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

SAS语言抛砖引玉Beta版.docx

《SAS语言抛砖引玉Beta版.docx》由会员分享,可在线阅读,更多相关《SAS语言抛砖引玉Beta版.docx(82页珍藏版)》请在冰点文库上搜索。

SAS语言抛砖引玉Beta版.docx

SAS语言抛砖引玉Beta版

《SAS语言抛砖引玉》(Beta版)

  发表日期:

2008年4月12日    作者:

锻剑行    【编辑录入:

aegean】

《SAS语言抛砖引玉》(Beta版)

锻剑行

前言

第一章关于SAS

第二章语言基础

第三章SAS视窗操作

第四章输入数据

  第一节读取原始数据

  第二节输入格式

  第三节导入数据

  第四节其他输入数据方式

第五章整理数据

  第一节、数据集选项

  第二节、在数据步中整理数据集

  第三节、过程步的整理

  第四节、缺失值的处理

第六章输出结果

  第一节输出方式

  第二节print过程

  第三节put输入与输出格式

  第四节export过程

第七章调试程序

  第一节错误分类

  第二节如何调试程序

附录1SAS系统管理与环境设置

附录2SAS常用语句一览

附录3SAS常用函数一览

《SAS语言抛砖引玉》(Beta版)

锻剑行

——不要把学SAS当作一件很时髦的事情,能用简单软件完成的事情就没有必要动用SAS;如果你的领域是统计,那应该考虑一开始就学习SAS。

前言

纵观市面上的SAS书籍,发现SAS教程也不少,但是大多都是统计应用的书籍,而讲解SAS语言基础的书籍却很难见到。

作为一门语言,语法教程的缺位是不应该的。

较之于其他语言的语法教程比比皆是,这也确实是一种奇怪的现象。

目前大多的SAS数据也并不是没有讲到基础内容,而是都草草的介绍了一些语言基础就开始把读者带入统计过程,本来有些初学者心态就很急,而作者这么快的就将读者带入应用领域,更加没有人去学好语言基础了。

更有甚者,某些作者在书中写了一些所谓的标准程序,然后告诉读者只要按照标准程序去套用就行了,还声称这是学习SAS最快捷的方法。

因此,作者决定写一本语言基础的教程,详细的讲解SAS语法。

非常非常高兴我的第一本SAS教程经历一个多月终于出炉了,将其命名为《SAS语言抛砖引玉》。

该教程讲解SAS最最基础的知识,之所以说是基础,是因为它跟已有的教程有一个最大的区别——只有SAS语言,没有任何统计过程。

没有任何统计过程的好处是读者能够静下心来跟随作者一起去研究SAS语言,弄懂它,吃透它;而不是刚会走就想着跑甚至想飞,还没学几条语句就想去做统计分析,到头来发现错误百出而又手足无措。

面向对象

任何想学习和了解SAS语言的人。

此教程可以学到什么?

导读

第一章是介绍什么是SAS。

第二章是语言基础主要是各语法元素:

数据类型、表达式(变量、常量、算符)、语句、数组、控制流、函数等,还介绍了SAS特别的程序结构和特有的数据集知识。

如果有其他语言的基础学习这一章会很容易理解,多多比较SAS语言跟其他语言的区别对两门语言都有裨益。

第三章是SAS的视窗操作只是略加提及,没有细致讨论。

第四章是如何输入数据?

输入输出本就是一门语言最基本的要素,但SAS有些特殊,它的输入方式多种多样而且稍显复杂但功能强大,因为作为统计分析软件,输入数据还肩负着如何正确识别的问题。

第五章是如何整理数据?

将输入的数据整理成我们想要的形式,以便更好的呈现和进行后期分析。

第六章是如何输出数据?

输出数据跟输入数据是相反的过程但有着相同的机制,对第四章足够熟练的掌握基础上,学习这一章不费吹灰之力。

第七章是如何调试程序?

了解通常会出现哪些错误对避免措施是很有好处的,LOG窗口的信息往往是提供了查找语法错误的重要信息,而使用data步调试器则可以让程序员很方便的发现逻辑错误。

此教程不可以学到什么?

本教程没有讲到任何统计分析的过程,期望从这里学到如何直接进行诸如t检验,方差分析,卡方检验的人可以到这里止步了。

本教程不是语法参考书,只包含常用的语法,最为准确、权威和全面的语法说明还是SAS软件自己的帮助文档。

要说它是哪个SAS模块中的内容,这只能算是BaseSAS中很少的一部分知识。

如何更好的学习本教程?

本教程不一定要完全按照顺序来读,有些前面比较基础的内容举例中往往用到后面章节的语句或语法,如果有些不懂,可以先跳过,看过整个教程后再回头再慢慢琢磨。

多多结合实例进行学习,这样才会将语法理解透彻。

本教程出现的例程都经作者测试过,即使从帮助文档上面弄来的也不例外。

如果还有什么问题,可以直接跟作者()交流,也欢迎有人对本教程进行批评指正。

好了,最后希望本教程让你的SAS语言知识能够得到一点点增长,被你忽略的SAS编程的细节能够重新引起你的重视,似懂非懂的一些问题能够明了清晰。

第一章关于SAS

1.SAS是什么?

WhatisSAS?

SASisasetofsolutionsforenterprise-widebusinessusersaswellasapowerfulfourth-generationprogramminglanguageandanintegratedsystemofsoftwareproductsforperforming

这是官方的解释。

我们可以看出SAS公司对SAS系统的定位:

能提供企业级商业应用的一整套解决方案;功能强大的第四代程序语言;综合性的产品库。

可以看出,SAS已经不仅仅是一个统计分析软件,而是一个功能强大的软件系统。

它的强大体现在它庞大的产品库上,它的触角几乎已经伸到数据处理的每一个领域。

尽管如此,SAS软件还是以它的统计功能驰名,这也是它整个系统的基石,所以通常提起SAS,会认为它是统计分析软件。

这里我不解释SAS的全称是什么,但是希望每一个学SAS的人应该知道。

2.SAS模块产品库

前面提到SAS是一个综合产品库,是因为SAS是一个组合软件系统,SASSystem是由一个一个的模块(或称为产品)组合到一起,可以单独购买和使用某一个模块或几个模块。

当然,其中BaseSAS是核心,除了提供数据管理和一部分统计分析功能外,它是作为其他模块的基础而必须存在。

至于SAS具体包含那些产品/模块,可以参看有关书籍对SAS的介绍或帮助文档。

之所以介绍SAS的产品库,是想让大家知道,SAS是一个庞大的系统,我们现在学的只是它一个模块——BaseSAS中很少一部分内容,不要因为会几个统计过程就以为“精通”SAS,即使高手也要在精通后面限定某个模块。

3.SAS的安装

·配置要求如何?

首先说一下配置要求,硬件方面只要不装在老爷机上就行了,一般近几年的机器都不存在问题,至于详细的硬件配置要求,有兴趣的可以查看帮助文件或者SAS官方网站()。

软件环境方面,本教程就只考虑在Windows系统下的使用。

·SAS软件如何获得?

至于SAS软件怎么获得,这个就要靠自己想办法了,上网搜搜或者去论坛逛逛很容易找到。

如果是单位/企业用户,那还是建议购买SAS正版软件,要不然可能面临侵权的诉讼,而且做出来的统计分析报告可能不能在国际上发表等等问题。

·SAS软件版本问题?

很多刚学SAS的人在获得SAS软件时总关心一个问题,应该用哪一个版本,而且很多人在动手学SAS之前花很大力气在很多论坛或QQ群里面辛苦的找SAS最新版本下载,其实SAS的版本对于大多数用户来说没有那么重要,特别是应用仅仅是统计分析的情况下。

前面我们讲了,SAS是一套系统,它发展到今天已经不仅仅是统计软件了,还包括很多模块,而且它的统计分析模块已经发展的很成熟。

版本的更新无非就是一些功能模块的扩展、程序算法的优化、界面的改进等等,甚至某些更新就是为了适应64bitcpu或者OS的出现,这些更新对统计分析等发展很成熟的模块影响不是很大。

所以个人觉得没有必要非得用最新的版本不可,手头上哪个版本最容易获得就可以开始学了。

国内用户常用的版本有6.12版、8.2版和9.0/,本教程是基于9.0版的,某个别地方有版本差别我会在文中给出说明。

·SAS软件的安装

安装SAS跟安装其他Windows软件没有什么区别,除非你的软件是D版的就有点复杂,具体过程请参考网上教程。

4.SAS帮助文档的结构

不管什么软件,它的帮助文档是很重要的。

学习SAS仅仅看帮助文档是不现实的,但是不看文档的人是学不好SAS的,特别是想准确、全面的学习SAS的某一方面的知识时,通过SAS书籍往往是不够的。

因此很有必要在这里突出帮助文档的重要性。

打开SAS帮助,就会看到帮助文档左边框架显示如下的结构

+What'sNewforSAS9

+LearningtoUseSAS

+UsingSASSoftwareinYourOperating

+SASProducts

+SASUserSupportServices

What'sNewforSAS9

告诉你SAS新版本更新的地方,非常详细的分模块介绍新特性。

如果用户是从SAS低版本迁移过来的想知道新版本有什么不同,或者非常关心SAS软件的发展情况,或者是特殊用户软件的版本差异对你影响很大,就可以从这里找到答案。

LearningtoUseSAS

告诉你如何学习使用SAS。

可以通过以下一些途径学习SAS:

+AccessingtheHelpSystem?

帮助文档

+SampleSASPrograms?

SAS实例程序

+SASOnlineTutor?

在线手册

+Tutorial:

GettingStartedwithSASSoftware?

使用指南

其中帮助文档提供了最为准确、权威和全面的信息,也就是本章为什么要介绍帮助文档的结构的原因。

但是对于中文用户最大的不便就是帮助文档是英文版的,所以,如果不懂英文或特讨厌英文,那帮助文档就一文不值了。

其实这些英文只要稍微有点SAS的知识是很容易看懂的。

例程库提供了很丰富的程序代码,而且按模块分类组织在一起,这样很方便学习。

通过例程的学习可以很好的理解SAS语法,而且通过阅读例程有利于养成良好的编程习惯。

SAS网站上的支持服务中心()也是可以获得资源的好地方,不便的同样也是英文。

里面有SAS每一个模块pdf版本的详细资料,内容类似于帮助文件;有大量丰富的SAS例程;有SAS用户总结的文章等等。

UsingSASSoftwareinYourOperating

这里介绍了如何在特定的操作系统环境下更好的使用SAS,如Windows下的视窗操作,如何调用其他应用程序以及使用DDE等;某些跟机器环境有关的特性在这里查询。

SASProducts

这里是SAS帮助文档的核心,每一个模块的概念、操作、使用以及应用都在这里查询,这里也是使用率最高的一部分,通常使用文档就是查看这里的内容。

本书的语法参考就来源于SASProducts-BaseSAS,以及部分例程也来源于此。

BaseSAS分为几大部分。

--What'sNewinBaseSAS9?

BaseSAS9的新特性

--AboutBaseSASSoftware?

BaseSAS概述

+UsingBaseSASSoftware?

如何使用BaseSAS模块

+SASProcedures?

BaseSAS的过程参考

+SASLanguageConcepts?

SAS语言概念

+SASLanguageElements?

SAS语言元素

+MovingandAccessingFiles?

移动和访问文件

+OutputDeliverySystem(ODS)?

输出传送系统

+SQLQueryWindow?

SQL查询窗口

+SASMacroReference?

SAS宏参考

SAS语言概念讲述的更多是语言元素的概念,例如什么是变量、函数、表达式、语句、数据集、过程、输入输出格式等等。

如果想对这些概念比较清楚的掌握而且弄清楚SAS语言的结构和机制,可以详细的阅读这一部分。

SAS语言元素更多的是具体的元素,例如所有的数据集选项、所有的语句、所有的函数等等都可以在这里找到用法参考。

因此如果是想知道某一具体的语句、函数等的用法可以阅读这一部分内容。

SASUserSupportServices

常规性的信息,如如何获得技术支持,培训,如何购买软件,如何加入SAS讨论组等等。

第二章语言基础

(程序结构、数据类型、表达式与语句)

——如果你曾经学过一门语言的话,就应该知道语言基础这里会讲些什么内容了。

其实各种语言的语法套路是差不多的,无非就是数据类型、变量、常量、运算符、流程结构、函数以及输入输出等。

1.第一个SAS程序(SASprogram)

title"MyfirstSASprogram";

datatemp;

  inputgroup$x@@;

  cards;

A54.0B50.2A56.6B53.8A57.3A51.2

;

procttestdata=temp;

  varx;

  classgroup;

run;

这个程序是用t检验来检验6-7岁的城市儿童与农村儿童的胸围是否不同。

SAS程序中,每一行以分号(;)结尾的称为语句,语句是SAS程序最基本的单位,这跟其他语言是一致的。

SAS程序的层次是非常清楚的,因为它是模块化的。

每一个SAS程序是有若干个语句组成,看起来可能非常复杂松散,而实际上SAS程序是两个模块化的结构构成即数据步和过程步,以及一些设置环境变量的全程语句。

上面程序中,第一个语句是标题语句,也即是全程语句。

data语句到第7行单独的分号被称为数据步,proc语句到run;语句被称为过程步。

而且有些语句是专用于数据步的,比如input语句和cards语句;而有些语句是专用于过程步,如var语句和class语句;还有些语句是可以单独放在任何位置,称为全程语句。

1.1程序结构:

数据步(Datastep):

用来创建和修改用于统计分析的数据集,实现基础的编程功能;每个data步以data语句开始,可以包含任意多个SAS程序语句。

过程步(Procstep):

利用已创建的数据集完成特定的统计分析任务、结果输出及部分数据集整理功能。

proc步以proc语句开始,数据集作为输入;其他语句给出用户想得到有关结果的更多信息的程序语句,这些语句依赖于用户调用的具体的过程。

数据步只要求以data步开始,没有其他限制;而proc步则更像一个模板,每一个过程有确定可用的语句,用户根据需要往上面填写。

所以,说到SAS编程,大多的技巧和艺术都集中在数据步,过程步几乎没有任何的技巧可言,过程步应用的好坏一方面取决于你前面数据处理的好坏,另一方面取决于用户的统计基础。

1.2数据步的自循环(Datastep'sBuilt-inLoop):

个人觉得,如果要学习SAS,最首先要掌握的就是SAS程序的结构及运行机制,而其中最关键的又是data步的自循环,如果不能够理解这一点,那后面的内容就如空中楼阁,是不稳固的。

首先,数据步程序是一行一行的执行,这就意味着变量在使用之前必须创建。

这一点很容易理解,几乎所有的语言都是如此。

其次,数据步程序是一个观测一个观测读取。

当程序正确的执行到数据步的最后一个语句时,就将该次读取的一条观测写入数据集,然后又重新开始执行数据步,继续读取观测值,这就是数据步的自循环。

也就是相当于数据步的最后隐含包括了两个语句,output与return语句。

第一个问题是读取的数据在执行到最后写入数据集之前保存在哪里?

input语句执行后,SAS将读取的数据暂时先保存在内存缓冲区,然后执行后面的语句,后面的语句可以对暂存在内存缓冲区中的变量值进行修改,到最后才将整条数据写入数据集,写入数据集的数据就不能在当前data步中再修改。

第二个问题,在data步中间使用return语句会怎么样?

自然是按照用户的意思进行执行,当遇到return语句时就重新执行数据步,读取下一条观测值,而跳过return后面的语句。

第三个问题,在data步中间使用output语句呢?

那么程序会在执行到output语句那里就把放在内存缓冲区里面的观测值写入数据集,而不是等到整个data步执行完了再写入。

弄清楚这三个问题了应该弄明白data步的自循环是怎么回事了。

而且会发现原来data步不一定是一次只可以读取一条观测,完全可以两条或者更多条一次的读取,比如重复input语句,并且在每条语句之后加一条output语句,就可以实现了。

2.数据类型(Datatype):

我们在学其他编程语言的时候可能学到很多数据类型,但是SAS将各种各样的数据简化为两种类型,即数值型(numeric)和字符型(character)。

那么这里就有问题了,像C语言那样丰富的数据类型而且实际上也存在各种类型的数据,SAS是如何处理的呢?

这里就是SAS的特别之处了,两种基本的数据类型外加丰富的数据格式就能识别和显示各种各样的数据了,但是前提是你要告诉SAS怎么去识别和显示数据,按照什么格式去识别和显示数据,这里就涉及到SAS里面一个比较复杂的问题,数据格式,输入数据需要指明输入格式(informat),输出数据需要指明输出格式(format),这个内容请参看后面的有关章节,这里先了解一下。

另外一个问题,从数据类型角度我们把语言分为强类型的和弱类型,强类型的比方说C语言,在使用变量之前得先定义变量,而且必须指定一种数据类型。

而SAS则是弱类型的,也就是在用使用变量之前是不需要定义的,变量的类型取决于数据的类型或者预先定义的格式。

这个在后面的程序中可以更多的感受到。

3.变量(variable)

变量的命名规范跟其他语言基本相同,要以字母或下划线开始,不要使用系统保留的名称等;需要指明的是SAS的变量名是大小写不敏感的,最多32个字符,不像SPSS一样,SAS并不支持中文变量名,但是可以用变量标签(label)对变量进行说明,变量标签支持中文,最多256个字符。

下面主要讲解SAS比较特殊的内容。

3.1变量的类型(type)

前面讲了SAS的数据类型只有两种,数值型和字符型,那么相应的变量类型也是两种,数值型变量和字符型变量。

那么如何用这两种类型的变量去存储各种类型的数据?

前面一节提到SAS通过丰富的格式数据格式来识别和显示各种形式的数据,那么识别之后怎么存储呢?

SAS有一套规则来将所有的数据转换成数值型或者字符型来存储,时间日期,货币数据都不例外。

详细内容请参看后面有关章节。

?

?

?

?

3.2变量的类型转换(TypeConversions)

对于变量类型之间(字符型与数值型)的转换,SAS有一套规则如下,

·如果字符变量与数值运算符在一起使用,则SAS将字符变量转换为数值;

·如果字符变量与数值变量进行比较符运算,则SAS将字符变量转换为数值;

·如果数值变量与字符运算符在一起使用,则SAS将数值变量转换为字符;

·如果在一个赋值语句中,左边跟右边的类型不一,则将右边的类型转换成左边的类型;

以上这些转换规则是SAS自动完成的,并且在LOG窗口中打印一个警告信息,指示这个转换发生的地方。

以上这些情况在编程的时候最好是不要出现,因为虽然是自动完成,但是转换的结果不一定是我们预期的,比方说字符变量转换成数值时产生的是一个无效的数值,结果就造成了缺失值,当然SAS会在LOG窗口中提示出错信息,同时置自动变量_ERROR_的值为1。

3.3如何创建变量?

(CreateVariables)

SAS是弱类型的语言,使用变量前不需要定义,可以在数据步中直接使用变量,当然更多的情形是在用input语句读取数据时。

如果是要预先定义变量的格式,则用format语句、informat语句、length语句或attrib语句都可以创建变量。

3.4变量的属性(attribution)

通常说起变量,就是指变量的名称。

其实变量名只是变量的属性之一。

打开一个数据集,然后选定任意一列,点击右键查看属性就会发现第一个选项卡是general,这个对话框里面的内容即为变量的属性,包括变量名、类型、标签、长度及其输入输出格式。

变量名用来标识变量,区分不同的变量;类型是指变量是字符型还是数值型;标签用来补充变量的信息,特别是SAS变量不支持中文命名的情况下可以将中文说明写在变量标签里;长度是变量所有容纳的最多字符的字节数或最大数值的字节数,在没有指定的情况下通常由input语句读取第一个观测值确定下来,当然可以用语句事先指定;输入输出格式用来输入输出数据,让SAS能对内部与外部的数据能实现转换,

3.5变量列表(variablelist)

在一个数据集中,变量按照第一次的出现的顺序(也就是在数据集中的顺序)被SAS系统存储为一个系列,这个系列就是一个完整的变量列表。

而实际上我们在操作变量的时候只需要选取其中部分变量,而有了这个完整的变量列表就可以在许多语句中使用缩写的变量列表了。

在SAS中,可以使用4种缩写的变量形式:

(1)数字系列

如果有一系列变量是这样定义的,相同的名字后面加上一个连续的数字,就可以采用数字系列的缩写,如

x1,x2,x3,…,xn可以缩写为

x1-xn

(2)变量名系列

变量名系列就依赖于变量在SAS数据集中出现的顺序,如

x--a就表示从x变量开始一直到a变量结束这一系列变量,结合自动变量就可以更加灵活的使用变量列表,如

x-numeric-a表示从x变量开始到a变量结束之间的所有数值型变量,

x-character-a表示从从x变量开始到a变量结束之间的所有字符型变量,

(3)前缀名系列

如果有一系列变量具有相同的前缀名,比方说SALES_JAN,SALES_FEB,SALES_MAR…则可以使用下面的形式表示这一系列变量名,

sales:

打印这些变量,则

procprint;

  varsales:

;

run;

对这些变量求和,则

sum(ofsales:

(4)特殊的变量列表

包括三个自动变量代表的变量列表

_ALL_

全部变量

_CHARACTER_全部字符型变量

_NUMERIC_全部数值型变量

3.6自动变量(automaticvariable)

自动变量是在程序中被SAS自动创建的变量,这些变量名有着特殊的用途,下面介绍一下在data步中的两个自动变量,过程步中的自动变量在具体的过程中讲解。

_N_

_N_在data步开始执行前被初始化为1,然后data步自循环一次该变量增加1,也就是_N_代表data步循环执行的次数。

这个变量存在于每一个数据集中,但是一般不会显示也不会被打印。

_ERROR_

_ERROR_在data步执行前被初始化为0,当data步执行过程中遇到错误时就会自动被置为1,而且会在LOG窗口中打印出来,这样有利于调试程序的时候定位错误出现的位置以及出现错误时采取相应的处理。

Tips:

这里还是说一下SAS的变量命名规则:

·首字符要以字母或者下划线开始;

·名称中只能包含字母、数字和下划线;

·变量名可以是大写,可以是小写,也可以是混合写的,但是SAS会当作是同一个变量名,也就是大小写不敏感;

·不要与系统保留的字段同名,比方_N_;

·变量名长度,SAS9.0是32位,6.12版和8.2版是8位;

说明:

其实这些规则同样适用于命名数组、逻辑库、数据集、宏变量、宏名、函数等等,不同的地方是长度限制可能不一样,具体可以查看帮助文件。

4.常量(

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2