第一章SAS系统概况SAS(Statistic Analysis System)系统是世界领先的信息系统,它由最初的用于统计分析经不断发展和完善而成为大型集成应用软件系统;具有完备的数据存取、管理、分析和显示功能。
在数据处理和统计分析领域,SAS系统被誉为国际上的标准软件系统。
SAS系统是一个模块化的集成软件系统。
SAS系统提供的二十多个模块(产品)可完成各方面的实际问题,功能非常齐全,用户根据需要可灵活的选择使用。
●Base SASBase SAS软件是SAS系统的核心。
主要功能是数据管理和数据加工处理,并有报表生成和描述统计的功能。
Base SAS软件可以单独使用,也可以同其他软件产品一起组成一个用户化的SAS系统。
●SAS/AF这是一个应用开发工具。
利用SAS/AF的屏幕设计能力及SCL语言的处理能力可快速开发各种功能强大的应用系统。
SAS/AF采用先进的OOP(面向对象编程)的技术,是用户可方便快速的实现各类具有图形用户界面(GUI)的应用系统。
●SAS/EIS该软件是SAS系统种采用OOP(面向对象编程)技术的又一个开发工具。
该产品也称为行政信息系统或每个人的信息系统。
利用该软件可以创建多维数据库(MDDB),并能生成多维报表和图形。
●SAS/INTRNET●SAS/ACCESS该软件是对目前许多流行数据库的接口组成的接口集,它提供的与外部数据库的接口是透明和动态的。
第二章Base SAS软件第一节SAS编程基础SAS语言的编程规则与其它过程语言基本相同。
SAS语句一个SAS语句是有SAS关键词、SAS名字、特殊字符和运算符组成的字符串,并以分号(;)结尾。
注释语句的形式为:/*注释内容*/ 或*注释内容。
二、SAS程序一序列SAS语句组成一个SAS程序。
SAS程序中的语句可分为两类步骤:DA TA步和PROC步。
这两类步骤是所有SAS程序的模块。
通常用DATA步产生SAS数据集,而用PROC 步对SAS数据集内的数据进行分析处理并输出结果。
SAS程序是在Editor窗口采用全屏幕编辑方式输入。
当程序输入完毕后,就可以提交给SAS系统执行,在菜单中选择Submit或按F3键都可以运行程序,也可以只提交一部分语句。
LOG窗口显示程序执行过程中记录的信息,它包括执行的语句,生成的数据集中变量的个数及记录的个数,每一步花费的时间及出错信息等。
SAS过程产生的输出显示在OUTPUT窗口。
SAS数据集SAS数据集相当于其它数据库系统的表(Table);每一行称为一个观测,相当于其它数据库系统的一条记录;每一列称为一个变量。
SAS的变量只有两种类型:数值型和字符型;变量的长度缺省时为8个字节,用关键字LENGTH定义变量长度;可以对变量的输入、输出格式进行定义,用关键字INFORMA T、FORMAT来分别定义;还可以给变量加标签,标签是一个代替变量名的描述性标识,可以在一些确定的SAS过程中代替变量名被打印出来,用关键字LABEL定义。
SAS数据集在系统中以文件的形式存在,扩展名是.sas7bdat。
每次启动SAS系统后,系统自动开辟一个库名为WORK的临时存贮区,用来存贮DATA 步或其它过程生成的临时数据集。
一旦退出SAS系统,这个临时存贮区就被删除,其中所有的临时数据文件也被删除。
为了创建永久的数据集,必须给这个数据集规定存贮的地方和名字两部分,第一部分称为库标记或逻辑库名(Libref),它总是使用LIBNAME语句把库标记和一个目录联系起来,用来指示数据集存贮的地方。
例如:libname develop ‘d:\projects\develop\data’develop.t_itemsum表明数据集t_itemsum存贮在‘d:\projects\develop\data’目录下。
tmp 或work.tmp表明数据集tmp存贮在临时存贮区中。
SAS表达式和SAS函数SAS语言的表达式与其它过程语言略有不同。
SAS语言中数值型变量的缺失值是一个小数点(.),字符型变量的缺失值是空(′′)。
在一个四则运算的表达式里面,如果有一个缺失值,那么整个运算的结果就是’.’;如果用户不想让缺失值参加算术运算,可使用SAS的样本统计函数,如SUM(),MEAN()等。
如果除法运算的除数为0,那么运算的结果也是’.’。
表示时间的变量在数据集里经常被定义为数值型,0代表的是1960年1月1日,1代表的是1960年1月2日,-1代表的是1959年12月31日,以此类推。
我们可以用FORMA T 定义时间的输出格式,如:yymmdd10.这种格式显示的时间形式如’2001-05-01’。
时间常数可以表示成'01MAY2001'd的形式,如:if occdate=’ 01MAY2001’d。
算符’| |’连接两个字符值,连接算付不清里开头和结尾的空格,如:如果itemid=’622 ’,itemname=’ 逾期贷款’,那么itemid | | ‘.’| | itemname=’ 622 .逾期贷款’。
如果要去掉空格,就要使用SAS函数TRIM和LEFT,trim(left(itemid)) | | ‘.’| | trim(left(itemname))=’ 622 .逾期贷款’。
下面是一些常用的函数:字符函数:TRIM(s):去掉s尾部空格;LEFT(s):字符串s的表示式采用左对齐,即去掉s开头的空格;SUBSTR(s,p,n):从字符串s中的第p个字符开始抽取n个字符的子串。
LENGTH(s):给出字符串s的长度;INDEX(s,s1):搜寻字符串s1在字符串s中的位置;INPUT(s,informat):字符s的输入格式为informat ,如:INPUT(‘1960-01-01’,yymmdd10.)=0;PUT(s,format):将s 按format的格式输出,如:PUT(0,yymmdd10.)=’1960-01-01’,结果一定为字符型;SYMPUT(‘x1’,x2):把x2的值赋给宏变量x1SYMGET(‘x’):取得宏变量x的值;时间和日期函数:DA TE( ):取当前日期;DA TETIME( ):取当前日期和时间;YEAR(date)、MONTH(date)、QTR(date)、DAY(date):分别取date表示的年、季度、月份、日。
INTX(in,from,nu):按给定的时间间隔in—年(year)、季度(qtr)、月份(month)、日(day),从日期from,推算出nu个时间间隔后的日期的第一天。
如:PUT(INTNX(‘qtr’,INPUT(’1960-02-01’,yymmdd10.),2),yymmdd10.)=’1960-07-01’第二节DATA步(数据步)DA TA步是用DA TA语句开始的一组SAS语句,用来创建SAS数据集。
本小节将介绍一些在DATA步中常用的SAS语句。
创建SAS数据集及输出文件或报表1.数据在作业流中就是用SAS语句从作业流中输入数据来产生SAS数据集。
一般的形式为:DATA 语句;/*给出要产生的数据集的名字*/ INPUT 语句;/*对每个变量给出名字及类型*/(用于DATA步的其它SAS语句)CARDS;/*标志数据行开始*/[数据行];例:data tmp;input sex $ x1-x3;cards;F 1 2 3M 4 5 6 ;2.数据来自外部文件从磁盘上读入数据文件产生SAS数据集。
一般的形式为:DATA 语句;/*给出要产生的数据集的名字*/ INFILE 语句;/*打开包含数据的外部文件*/INPUT 语句;/*对每个变量给出名字及类型*/(用于DATA步的其它SAS语句)RUN;例:data tmp;infile ‘c:\f1.dat’;input sex $ x1-x3;z=(x1+x2+x3)/3;run;3.数据来自其他SAS数据集由已存在的数据集创建新的数据集。
DATA 语句;/*给出要产生的数据集的名字*/SET | MERGE | UPDATE| MODIFY语句;/*给出已存在的数据集的名字*/(用于DATA步的其它SAS语句)RUN;例:data tmp;set tmp;if sex=’F’;run;4.把SAS数据集转换为外部数据文件或输出报表产生外部数据文件或在打印机上输出报表。
DATA _NULL_;/*_NULL_意味着不产生数据集*/INPUT和CARDS | INFILE 语句或者SET | MERGE | UPDA TE| MODIFY语句;/*为输出提供数据*/ FILE 语句;/*输出报表或存贮文件*/PUT 语句;/*要输出的变量*/(用于DATA步的其它SAS语句)RUN;例:data _null_;set tmp;file ‘c:\f1.dat’; (或者file ‘prn’;)put x1 x2;run;二、DATA步流程三、用在DATA步的文件操作语句1.D ATA语句和SET语句DATA语句表示一个数据步的开始,并给出正在创建的数据集的名字。
SET语句给出用来创建新的数据集的已存在的数据集的名字。
例:data year1999 year2000 year2001;set year qtr month;if year=1999 then output year1999;else if year=2000 then output year2000;else if year=2001 then output year2001;run;2.M ERGE语句(合并语句)MERGE语句是把两个或两个以上的数据集中的观测合并为新生数据集中的一个观测。
例:data data3;merge data1(in=in1) data2(in=in2);by x1; /*数据集必须先按变量x1排序*/if in1 and in2; /*变量x1取当前值的观测在data1和data2中都存在*/run;3.U PDATE语句(更新语句)UPDATE语句是用一个修改数据集中的观测来修改一个主数据集。
例:data new;update oldmaster trans;by id; /*数据集必须先按变量id排序*/ run;4.B Y语句BY语句在DATA步中用以控制SET,MERGE,UPDA TE或MODIFY语句的操作,并且建立特殊的分组变量。
例:proc sort data=degress;by state city;run;在DATA步中,SAS系统对每个BY组(含有BY值的所有观测组成一个BY组)创建两个临时变量:FIRST.variable和LAST.variable,他们用来区别每个BY组的第一个和最后一个观测。