第4章SAS软件的深入应用.doc_第1页
第4章SAS软件的深入应用.doc_第2页
第4章SAS软件的深入应用.doc_第3页
第4章SAS软件的深入应用.doc_第4页
第4章SAS软件的深入应用.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

同济大学应用数学系 第四章 SAS软件的深入应用 统计计算第四章 SAS软件的深入应用第一节 SAS编程概念简介一、SAS程序的运行我们用例子来说明在SAS显示管理系统内是如何进行程序运算的。若要将一个外部数据文件转换成SAS数据集,首先在Editor窗口内编辑程序:data class;infile c:sasclass.txt;input name $ group $ birthday height weight english math;run;然后在菜单栏内按SUBMIT命令(或按F3)键,或在Run选项菜单内选择submit,将程序提交给SAS系统处理。这时,LOG窗口显示出数据集建立成功及执行时有关的信息,包括错误和警告信息。要想在屏幕上查看数据,双击Explorer窗口中的Work子目录,再双击class数据集图标。按F3提交程序以后,假如没有错误,OUTPUT窗口自动输出PROCPRINT过程步运行结果。在这儿注意,一旦数据建立以后,就不必再提交DATA步了。例如你还可再次提交PROC步,产生一个表格:proc tabulate; class group;table group;run;LOG窗口累计显示历次执行程序的信息,在OUTPUT窗口内显示出PROC TABULATE步产生的表格。执行END命令(或按F3键)回到Editor窗口。在命令行执行MANAGER命令可以管理OUTPUT窗口的内容,在OUTPUT MANAGER窗口中有下列字命令可供选择:S 查看所选的页。(该命令还可以用在其他窗口,例LIB,VAR等。)E 编辑所选的页。P 打印所选的页。D,V 删除所选的页。F 将所选的页存到一个文件中去。如果出现错误信息,用RECALL命令(或按F4键)调回刚提交的程序进行修改。它的一般格式为: RECALL RECALL nn为调回最近n次提交的所有程序。 例如:在命令行输入 RECALL 3回车以后,把三次提交的程序一起调回PGM内。RECALL命令还可以用快捷键F4或在LOCALS选项菜单内选择RECALL。在显示管理系统内还有其他的常用的命令: -ZOOM 改变窗口的大小,也可用鼠标点一下窗口的右上方的图标。CLEAR 清除窗口内的内容,也可在EDIT选项内选择Clear text项。FILE 将PGM内的内容存入一个文件中去;也可在FILE选项内选择Save as项。INCLUDE 将外部文件拷贝到Editor窗口,也可在FILE选项内选择Open项。二、SAS程序 SAS程序是由用户向SAS管理器提交的要运行的一系列的过程步组成。SAS管理器再调用SAS系统合适的部分来完成程序中所定义的任务。SAS程序有两种类型的步组成。通常用来建立SAS数据集的被称为数据步。它是以DATA语句开头,以RUN语句结尾。另一种通常用来分析并处理SAS数据集,生成所需的信息,称为过程步。它是以PROC语句开头,以RUN语句结尾。当有多个数据步或过程步混在一起提交给SAS处理器处理时,DATA语句或PROC语句起到前一步的RUN语句的作用,故两步之间的RUN常可省略,但最后一步必须以RUN语句结束。程序中出现的每一个步都是独立的,彼此不能交叉,不能嵌套。 在SAS程序中每个步由一个或多个语句组成。SAS语句一般由SAS系统能识别的关键字开头,总是用分号“;”结尾。SAS语句是自由格式的,能够在任何位置开始或结尾,一条语句可以连续在一行上,几条语句可以在一行上。三、SAS数据集 许多SAS过程和一些数据步语句处理的数据必须是SAS数据集的形式。SAS数据集是由两部分组成。一为描述性部分,包含有数据集的一般信息,例数据集名,建立数据集的时间,观察值的数目等存储信息。还包含有数据集中变量的属性,例如变量名,变量的类型,长度,输入输出格式,标记,位置等。另一个为数据值部分,它被安排成矩形状表格。每一列与数据字段相对应的是变量,变量有字符型和数值型两种变量。表格中的每一行为观察值,它对应于一行数据的记录。缺失的数值型变量值用“”表示,缺失的字符型变量值用空格显示。 对SAS数据集名及变量命名的规则是相同的。名字的字符长度为1个8个,必须用字母或下划线开头,中间可用任何字母、数字及下划线。 所有的数据集都有两级名字,并用句号“”隔开。第一级为库逻辑名,它为数据集库存放的物理位置的别名,它也确定了文件是临时性的还是永久性的。SAS文件名一般的形式为: librefSAS-filename libref 为库逻辑名。 SAS-filename 为数据库内具体涉及到的SAS文件名。libref缺省时,SAS系统就采用WORK库名,这数据集为临时性的,当退出SAS系统后,WORK库内的文件将消失。如果要建立永久性的文件,就必须指定一个除了WORK以外的名。SAS系统有一个永远存在的库,其名为SASUSER。假如想将文件放在你指定的位置内,可以使用LIBNAME语句。它的一般形式为:LIBNAME libref d: path;例:LIBNAME abc c:sas;在提交以后即建立了库名为ABC的数据库。其物理位置在C盘ABC目录内。假如要删除定义过的库名,可使用CLEAR选项: LIBNAME abc CLEAR;四、SAS系统的日期 SAS系统的日期值,是以1960年1月1日至读入日期之间的天数表示的,在1960年以前用负数表示。日期时间常量是用单引号括起日期值,后面接一个D(DATE)、T(TIME)或DT(DATETIME)来表示其类型。例:17oct91D 11612(天)2:45:32PT 53132(秒)17OCT91:14:45DT 1003329900(秒) SAS系统日期若没有定义输入输出格式,将按SAS日期值读取或输出。五、SAS函数 SAS函数是一个已编好的程序,它对一个或多个自变量计算以后,返回一个确定的值。一般格式为: functionname(argumentl,argument2,)每个自变量之间用逗号分隔,大多数函数可接受的自变量为常量、变量、表达式、函数。例:SUM(argumentl,argument2,) 计算自变量和。UPCASE(argument) 将自变量转换成大写的字符串。MDY(month,day,year) 转换成SAS日期。YEAR(SAS-date) 将SAS日期返回到四位数的年份值。QTR(SAS-date) 将SAS日期返回到数值为14的季度值。MONTH(SAS-date) 将SAS日期返回到数值为112的月份值。WEEKDAY(SAS-date) 将SAS日期返回到数值为17的星期值,1代表星期日,2代表星期一,还有其他函数可查HELP:将光标移到HELP以后选择SAS SYSTEM HELPS,再选索引,输入function查看。六、SAS表达式 SAS表达式由一系列运算数和操作符构成,运算数可以是变量名或常数,操作符有: (1)算术操作符 + 加;一 减;* 乘; 除;* 乘方。 对一个算术操作符的运算数若为缺失值,结果也为缺失值。 (2)比较操作符 =或EQ 等于;=或NE 不等于;或GT 大于; 或GE 大于等于;或LT 小于;或LE 小于等于。 IN(argumentl,argument2) 等于列表中的某一项值。 例:X+3 1N (5,Y* 2,7)表示如果Y=6时,X2、9、4时表达式为真;X为其他值时表达式为假。 (3)逻辑操作符 , &(AND) 与;| (OR) 或;(NOT) 非。 (4)其他 取大值; 取小值;| 字符串连接。操作符的优先级: 最高级 * 乘方;(NOT) 非;+、- 正、负号 第一级 、 取最大、最小 第二级 *、 乘、除 第三级 +、- 加、减 第四级 | 字符串连接 第五级 、=、=、75 THEN math=math+1; ELSE math=math+2;RUN;4、条件执行复合语句条件执行复合语句是利用DO和END语句,在某一条件下执行组语句。其一般形式为:IF expression THEN DO; executable-statements; END;ELSE DO; executable-statements; END;因此上述的例子也可写成:DATA classnew; SET abc.class(KEEP=name math english); IF math75 THEN DO;math=math+1;English=English+5; END; IF math75 THEN DO;math=math+1;English=English+5; END;IF math5); PUT N=; N=N+1; END;RUN; 例:DATA _NULL_; N=0; DO WHILE(N LE 5); PUT N=; N+1; END;RUN;6、OUTPUT语句 DATA步中,OUTPUT语句把观察值输出到数据集中去。其一般格式为: OUTPUT; OUTPUT SAS-data-set; 没有指明数据集名,那么观察值输出到正在建立的SAS数据集中去。例:从标准正态分布中随机抽取100个值,并建立一个数据集SAMPLNOR:DATA samplnor; DO I=1 TO 100; SAMPLE=NORMAL(1574); OUTPUT; END;RUN;例:将CLASS数据集按性别分成两个数据集FGROUP、MGROUP:DATA fgroup mgroup; SET abc.class; IF substr(group,1,1)=F THEN OUTPUT fgroup; ELSE OUTPUT mgroup;RUN; 如果有一个观察值的group的值为小写的f,以至于使该观察值进入mgroup,因此将DATA步改写成: DATA fgroup mgroup; SET abc.class; IF upcase(substr(group,1,1)=F THEN OUTPUT fgroup; ELSE OUTPUT mgroup;RUN; SUBSTR(S,P,N)是个字符函数,函数值为字符串S中的第P字符开始的N个字符。 UPCASE(S)是个字符函数,把字符串S变成大写。7、长度语句 长度语句用于定义或改变变量的长度。其一般形式为: LENGTH variable (s) $ length; 该语句有时可用于对变量的数值进行截尾,例:DATA class2; SET abc.class; LENGTH sex $6; IF SUBSTR(group,1,1)=F then sex=FEMALE; IF SUBSTR(group,1,1)=M then sex=MALE;RUN;proc print;run;8、选择变量 在DATA语句中使用DROP和KEEP选项来控制程序数据矢量(PDV)中哪些变量写入数据集。其一般格式为: DATA SAS-data-set (DROPvariables); DATA SAS-data-set (KEEP=variables); 例:将CLASS数据集内的weight、height丢弃,建立一个新的数据集CLASS1:data class3(DROP=weight height); SET abc.class;RUN;或DATA class4(KEEP=name group birthday); SET abc.class;RUN; 在DATA步内使用DROP和KEEP语句,控制程序中哪些变量保留在数据集内。其一般格式为: DROP variables; KEEP variables;例:DATA class5; SET class; DROP weight height; (或 KEEP name group birthday;)RUN;9、选择观察值(1)用IF语句建立一个子集。选择满足一定条件下的观察值写到数据集中去。求子集的IF语句的一般格式为: IF expression; IF expression THEN DELETE;假如条件表达式为假,就回到DATA步的顶部(该观察值被丢弃);条件表达式为真,就让观察值通过。 例如,我们需查看女同学的情况,即GROUP的值为F1或F2的观察值放入到FCLASS数据集:DATA FCLASS; SET CLASS; IF group=F1 OR group=F2;RUN; 又如,我们需调出1983年以前出生的人员名单并放入到BE-CLASS数据集内:DATA BECLASS; SET ABC.CLASS(KEEP=NAME BIRTHDAY); IF BIRTHDAY01JAN83D THEN DELETE;RUN; (2)WHERE语句控制进行处理的观察值,它的一般形式为: WHERE where-expression;Where-expression:是由一系列的运算数和操作符组成。操作符类型多为比较操作符、逻辑操作符及特定的WHERE操作符。前两种在第一节已经介绍了,现简单介绍一下WHERE操作符。WHERE操作符可简化观察值的选择,它有: (NOT) BETWEENAND 选择变量值在指定范围内的观察值。例:WHERE MATH BETWEEN 60 AND 75;WHERE MATH NOT BETWEEN 75 AND 85; CONTAINS 选择变量值含有WHERE表达式指定的字符串的观察值。例:DATA class6; SET abc.class; WHERE group CONTAINS F;RUN;WHERE语句也可在PROC过程步内使用。IF语句和WHERE语句虽然都可以选择子集,但它们在DATA过程步中的流程是不同的。IF语句选择观察值是从PDV中选择,而WHERE语句是在观察值进入PDV之前选择的,因此,在有的情况下在DATA步中会产生不同的结果,如合并数据集等。IF语句可以通过INFILE和INPUT语句有选择地读取外部数据,也可以读取已存在的SAS数据集;WHERE语句只能读取已存在的SAS数据集。通常WHERE语句放在过程步内的最前面。10、ARRAY语句 通常要按数组处理数据时,必须要用ARRAY-语句预先指明所用数组名称、元素个数、所代表的变量。其一般格式为: ARRAY array-namesubscript $ length array-elements array-name 数据名,该名不能再用于其他变量名。 subscript 下标,可以为一维或多维的,多维的之间用逗号分隔,并用括号( )或 括住。 $ 表明数组是字符型的。 length 指定数组元素的长度。 array-elements 列出构成数组的变量,当变量已定义了变量长度或为字符型变量时,则可省略length或$项。例:ARRAY X5 Xl-X5;ARRAY X2,3 Xl-X6;对多维数组变量从左上角开始按行顺序填满:X1置于X1,1、X2置于X1,2、。例如:DATA _NULL_;ARRAY XX(6,6) X1-X36;X=0;DO I=1 TO 6; DO J=1 TO 6; X=X+1; XX(I,J)=X; PUT XX(I,j)= XX(I,J); END;END;RUN; 四、SAS数据集的联接在实际使用中,常常需要将几个数据集连接在一起进行分析,我们将连接分成两类:一为连接,二为合并。连接: SET A B;将B接在A后面;合并: MERGE A B;将B中的变量作为新的变量合并在A中。1、连接SAS数据集使用DATA步连接的一般格式为: DATA SAS-data-set; SET SAS-data-set1 SAS-data-set2; RUN;新数据集的变量含有输入数据集的全部变量,若输入数据集的变量不同,对于没有的变量将用缺省值填入。对使用RENAME选项的输入,数据集将按重新命名的变量名连接,这样,可以将因变量名不一致而实际意义相同的变量连在一起。例如:把数据集A和B连接在一起,建立临时数据集C:数据集A: OBS NAME GROUP HEIGHT WEIGHT N 1 Karen F1 . . 4 2 Kathy F1 59.8 84.5 5 3 Mary F2 66.5 112.0 6 4 Sandy F1 51.3 50.5 7数据集B:OBS NUM NAME GROUP HEIGHT WEIGHT 1 12 Guido M2 67.0 133.0 2 13 James M1 57.3 83.0 3 14 Jeffrey M1 62.5 84.0 4 15 John M1 59.0 99.5 DATA C; SET A(RENAME=(N=Num) B;RUN;生成数据集C: OBS NAME GROUP HEIGHT WEIGHT N 1 Karen F1 . . 4 2 Kathy F1 59.8 84.5 5 3 Mary F2 66.5 112.0 64 Sandy F1 51.3 50.5 75 Guido M2 67.0 133.0 12 6 James M1 57.3 83.0 13 7 Jeffrey M1 62.5 84.0 14 8 John M1 59.0 99.5 15 如果在DATA步内增加一个BY语句,则新数据集按照BY语句列出的变量值的次序连接,但是输入数据集必须在连接前先按BY变量进行排序。例:PROC SORT DATA=A; BY height;PROC SORT DATA=B; BY height;DATA C;SET A B(RENAME=Num=N);BY height;RUN;2、合并SAS数据集 MERGE语句用来合并两个或多个SAS数据集的观察值,合并的一般形式为: DATA SAS-data-set; MERGE SAS-data-set1 SAS-data-set2 ; BY by-variable; RUN; 输入的SAS数据集必须按照BY语句指定的变量进行排序以后才能合并。新的数据集含有输入数据集中全部变量,除非数据集用 DROP或KEEP选项,观察值的次序按BY变量值的次序读取。 用MERGE语句合并时,数据按BY变量相同的值合并。例:用DATA步按NUM次序连接数据集E和F。数据集E 数据集FOBSNUMMATHENGLISHOBSNUMNAME15928015Kathy26566826Mary3665.37Sandy47829048Sharon58938359Tammy610AlfredDATA G; MERGE E F; BY num;RUN;数据集G 对输入数据集加上IN=选项,可检测哪个数据被选入到当前观察值去。数据选项IN的一般格式为: SAS-data-set(IN=variable) variable是一个用0、1表示的临时性变量。该变量不写到输出数据集中去。在编程时使用。 0 表示数据不被选入到当前观察值中去。 1 表示数据被选入到当前观察值中去。例:在上例中我们合并后要丢弃具有缺失值的观察值,我们可以修改程序为:DATA G2; MERGE F E(IN=score); BY num; IF score=1;RUN;数据集G2如下图:第三节 数据集的管理一、 显示管理系统内查看数据集在SAS显示管理系统内查看SAS数据集,可以在命令行内输入:LIB或LIBNAME, 回车以后,出现数据库窗口,显示出各数据库的名字及其物理位置。在你所选择的库名前输入字命令S,就出现该库内所有的文件目录窗口。你也可在命令行内执行DIR 库逻辑名调出目录窗口。若想查看数据集变量名及其属性时,你可以在目录窗口内文件名前输入S命令,就出现该文件的全部变量的属性,你可在变量名前输入R命令修改其属性,但不能改变变量的长度。你也可在命令行内执行 VAR 库逻辑名文件名调出VAR窗口。二、 检查、整理SAS数据集的过程步1、DATASETS过程步 PROC DATASET过程步可显示数据库的内容,其一般形式为: PROC DATASETS LIBlibref; CONTENTS DATA=member !_ALL_ NODS; RUN;libref SAS数据集的库名member PROC DATASETS语句中指定库内的文件名_ALL_ 指明库内全部文件名NODS 当使用_ALL_关键字时,列出SAS数据库内全部文件名而不打印每个文件的描述部分。 一旦提交了DATASETS过程以后,该过程一直停留在激活状态中,除非遇到一个PROC、DATA或QUIT语句。例:PROC DATASETS LIB=SASUSER;CONTENTS DATA=_ALL_ NODS;RUN;提交后在OUTPUT窗口显示: The DATASETS Procedure -Directory- Libref: SASUSER Engine: V8 Physical Name: D:Documents and SettingsaMy DocumentsMy SAS FilesV8 File Name: D:Documents and SettingsaMy DocumentsMy SAS FilesV8 File # Name Memtype Size Last Modified 1 CLASS DATA 9216 15SEP2003:08:05:40 2 PROFILE CATALOG 17408 08SEP2003:19:52:30 3 PROFILE2 CATALOG 1

温馨提示

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

评论

0/150

提交评论