《2SAS编程简介2》由会员分享,可在线阅读,更多相关《2SAS编程简介2(75页珍藏版)》请在金锄头文库上搜索。
1、2.SAS编程简介编程简介SAS程序由程序由数据步数据步和和过程步过程步构成,构成,数据步(数据步(Data Step)的设计灵活多样,)的设计灵活多样,过程步过程步(Proc Step)的设计比较规范,的设计比较规范,我们先重点介绍我们先重点介绍SAS系统数据步(系统数据步(Data Step)编程。)编程。 由三部分组成;SAS语句以一个关键词开始, 以分号(;)结束;Data Data esresr; /*; /*数据步:输入并建立数据数据步:输入并建立数据* */ /Input x; Input x; Cards; Cards; 3 39 98 86 65 55 57 73 31010
2、8 810104 4; ;Proc print; /*Proc print; /*过程步:调用现成的过程步:调用现成的SASSAS过程,进行统计分析过程,进行统计分析* */ /Run; /*Run; /*在程序最后在程序最后, ,指示过程步或数据步结束指示过程步或数据步结束, ,可以提交可以提交* */ /SAS程序结构:程序结构:Log窗输出窗输出Output窗输出窗输出程序运行-在编辑窗输入程序后点击图标点击图标按功能键按功能键“F8F8”在命令行(窗)键入在命令行(窗)键入“submitsubmit”在在runrun下拉菜单中选下拉菜单中选“submit submit ”窗口内容保存-
3、激活窗口后在命令行(窗)键入在命令行(窗)键入 file file “路径路径 文件名文件名”点击图标点击图标在在filefile下拉菜单中选下拉菜单中选“save save ”或或“save save asas” 二、SAS程序和SAS数据集 常用的快捷键F4 recallF4 recall命令命令, ,用于用于editedit窗窗, ,将前面提交的程序将前面提交的程序调回,可多次使用调回,可多次使用F5 F5 切换到切换到editedit窗窗F6 F6 切换到切换到loglog窗窗F7 F7 切换到切换到outputoutput窗窗F8 submitF8 submit命令命令Ctrl-E
4、Ctrl-E 清除当前窗口的内容。清除当前窗口的内容。 editedit窗被清除的内窗被清除的内容不能用容不能用F4F4调回调回 二、SAS程序和SAS数据集 2.1 SAS程序设计语言基本常识程序设计语言基本常识SAS统计分析程序主要包括两大步骤:统计分析程序主要包括两大步骤:一是数据步:将需要分析处理的数据组织成一是数据步:将需要分析处理的数据组织成SAS系统能够接系统能够接受的受的SAS数据集,数据步由数据集,数据步由Data关键字引出,大小写均可,关键字引出,大小写均可,由实现数据输入的数据步语句组成,完成计算原数据的准由实现数据输入的数据步语句组成,完成计算原数据的准备工作。备工作。
5、二是过程步:二是过程步:SAS系统所提供的强大的统计功能,都可以通系统所提供的强大的统计功能,都可以通过相应的过程步实现。但是过相应的过程步实现。但是SAS程序只能对程序只能对SAS数据集进数据集进行操作,所以在进行数据处理之前必须首先应用行操作,所以在进行数据处理之前必须首先应用数据步建数据步建立立SAS数据集数据集、或、或导入外部数据生成导入外部数据生成SAS数据集数据集、或者、或者使使用用Viewtable窗口建立数据集窗口建立数据集。SAS程序的数据步和过程步中,每一步都可以作为一段完整程序的数据步和过程步中,每一步都可以作为一段完整的程序单独运行,数据步用于的程序单独运行,数据步用于
6、生成数据集生成数据集,过程步用于完,过程步用于完成各种成各种数据分析、生成分析数据分析、生成分析报告。报告。2.1.1 SAS程序书写规范和运行方法程序书写规范和运行方法1. SAS程序的基本语法规定如下:程序的基本语法规定如下:SAS程序中除了赋值、表达式、注释和空语句之外,所有其程序中除了赋值、表达式、注释和空语句之外,所有其它语句都以它语句都以SAS关键字(关键字(SAS命令)引导(作为起始单命令)引导(作为起始单词),且不分大小写。词),且不分大小写。程序中使用的所有计算对象(变量、数据集、逻辑库)都必程序中使用的所有计算对象(变量、数据集、逻辑库)都必须按须按SAS标识符定义规定命名
7、。标识符定义规定命名。标识符命名规则为:标识符命名规则为:以字母或下划线开头。由字母、数字、下划线构成。应用中不区分大小写英文字母。每个每个SAS语句都必须以半角分号语句都必须以半角分号“;”作为结束符。作为结束符。SAS数据步语句以数据步语句以DATA关键字开头,以关键字开头,以RUN语句结尾。语句结尾。DATA步中可以使用步中可以使用INPUT、CARDS、INFILE、SET、MERGE等语句指定数据源,也可以用赋值、分支、循等语句指定数据源,也可以用赋值、分支、循环等程序流程控制语句实现复杂情况处理,完成复杂数环等程序流程控制语句实现复杂情况处理,完成复杂数据结构的输入和数据准备。据结
8、构的输入和数据准备。为了提高程序的可读性,在程序书写格式上为了提高程序的可读性,在程序书写格式上应遵循如下规则:应遵循如下规则:每个程序语句占一行。如果必须要占多行,从每个程序语句占一行。如果必须要占多行,从第二行起使用缩进格式。第二行起使用缩进格式。所有数据步和过程步结束均加上所有数据步和过程步结束均加上“run ;”语句语句作为段落的结束。作为段落的结束。每段的第一条语句和最后一条语句的第一个字每段的第一条语句和最后一条语句的第一个字母列对齐,中间语句按缩进格式写。母列对齐,中间语句按缩进格式写。SAS系统中有多种程序调用执行的方法,常用的方系统中有多种程序调用执行的方法,常用的方法如下:
9、法如下:最基本的方式是点击最基本的方式是点击Submit提交按钮,或按提交按钮,或按F8键,提键,提交程序运行。交程序运行。选择菜单选择菜单Run|Submit,系统就会依次执行提交的全部程系统就会依次执行提交的全部程序,并在序,并在LOG窗口中给出程序执行状态的信息,在窗口中给出程序执行状态的信息,在OUTPUT窗口中显示计算分析的结果。窗口中显示计算分析的结果。如果需要如果需要只执行程序中的某一部分只执行程序中的某一部分,可以先选中要执,可以先选中要执行的程序段,然后按前面两种方式调用即可。此功能行的程序段,然后按前面两种方式调用即可。此功能在调试程序时非常有用。在调试程序时非常有用。2.
10、1.2 SAS程序中的注释程序中的注释为了构成清晰的程序结构,建立具有良好可读性的为了构成清晰的程序结构,建立具有良好可读性的程序,在程序,在SAS程序中需要加入程序中需要加入注释注释。程序注释内容。程序注释内容采用采用/*和和*/在两端界定。注释可以出现在程序中任在两端界定。注释可以出现在程序中任何允许加入空格的位置,可以占多行。我们有时常何允许加入空格的位置,可以占多行。我们有时常把注释语句放在被解释的程序代码的同一行内,有把注释语句放在被解释的程序代码的同一行内,有时将注释语句单独占一行或若干行。下面是一个带时将注释语句单独占一行或若干行。下面是一个带有注释的程序实例:有注释的程序实例:
11、/* 建立建立02级级1班学生考试成绩的数据集班学生考试成绩的数据集 */Data Stu0201;2.2 SAS DATA步简介步简介2.2.1 DATA步基本结构步基本结构DATA数据步的语法结构数据步的语法结构 : DATA 数据集名数据集名 ; INPUT 变量名变量名1$ 变量名变量名2$ 变量名变量名n$; 其它数据步语句其它数据步语句 ; CARDS; /* (或或 CARDS4 ; 当数据中有当数据中有;作为数据时作为数据时使用使用Cards4语句语句) */ 源数据行源数据行 ; /* (或或 ; 上面使用了上面使用了CARDS4语句时,下面一语句时,下面一定对应使用定对应使
12、用4个分号个分号) */ RUN; 2.2 SAS DATA步简介步简介Data步语句说明:步语句说明:SAS处理的数据可分为:处理的数据可分为:字符型字符型、数值型数值型两大类,两大类,日期型数据属于数值型。日期型数据属于数值型。字符型变量名后必须使用字符型变量名后必须使用$说明符说明符。如分号如分号;作为数据出现在数据行中,就要使用作为数据出现在数据行中,就要使用CARDS4语句,并且数据行结束时要用语句,并且数据行结束时要用4个分号以个分号以区别作为数据的分号区别作为数据的分号;字符数据字符数据 。每行数据的行尾不能有分号每行数据的行尾不能有分号“;”,但数据行结束后,但数据行结束后的的
13、”;”分号必须单独占一行分号必须单独占一行。变量名不分大小写变量名不分大小写。例例2.1 data2_1.sas DATA CLASS ; INPUT NAME $ 1-11 SEX $ AGE HIGHT WEIGHT ; CARDS;ZHANG HONG F 18 176 75WANG XING M 19 163 55LI NING F 17 169 70; /*分号必须单独占一行分号必须单独占一行 */RUN ;注:注:INPUT语句中的语句中的NAME $ 1-11 是指变量是指变量NAME是字符是字符型变量,数据在型变量,数据在CARDS语句下方的数据行中占第语句下方的数据行中占第1
14、至至11列,列,从从12列开始的数据是列开始的数据是SEX变量的数据。变量的数据。SAS系统默认地以系统默认地以空格为各变量的数据分隔符,当某字符型变量的取值中含空格为各变量的数据分隔符,当某字符型变量的取值中含空格时,必须使用列标示指出该变量的取值长度,否则不空格时,必须使用列标示指出该变量的取值长度,否则不能正确读入数据。在能正确读入数据。在CARDS语句中的各变量的数据取值语句中的各变量的数据取值时应按列对齐,否则将导致数据获取错误。时应按列对齐,否则将导致数据获取错误。2.2.2用用DATA步生成步生成SAS数据集数据集 1. 用用DATA步创建永久步创建永久SAS数据集数据集 SAS
15、永久数据集需要使用两水平名称进行定义。定永久数据集需要使用两水平名称进行定义。定义过程由定义逻辑库与定义数据集两个步骤完成。义过程由定义逻辑库与定义数据集两个步骤完成。逻辑库定义通过逻辑库定义通过LIBNAME 语句完成,数据集定语句完成,数据集定义应用义应用DATA实现。实现。LIBNAME 语句语法格式:语句语法格式:LIBNAME 逻辑库名称逻辑库名称 子目录路径子目录路径 ; DATA 语句语法格式:语句语法格式:DATA 逻辑库名逻辑库名.数据集名称数据集名称 ;LIBNAME语句把磁盘中的子目录与用户定义的逻语句把磁盘中的子目录与用户定义的逻辑库名连接起来。辑库名连接起来。2.2.
16、2用用DATA步生成步生成SAS数据集数据集 程序程序Data2_2.sasLIBNAME EXAMPLE D:USER;DATA EXAMPLE.SALE ;INPUT NAME $ 1-11 SEX $ AGE HIGHT WEIGHT ;CARDS;ZHANG HONG F 18 176 75WANG XING M 19 163 55LI NING F 17 169 70;RUN ;2. DATA步中的步中的INPUT 语句语句 DATA步中的步中的INPUT语句用来确定语句用来确定 SAS数据集、数据集、数据集的数据类型、排列次序,并实现数据的导数据集的数据类型、排列次序,并实现数据的
17、导入。入。INPUT语句读入语句读入CARDS语句下面的数据。对语句下面的数据。对已经存在的永久已经存在的永久SAS数据集,可以使用用数据集,可以使用用SET、MERGE、UPDATE 等命令实现数据集的调用、等命令实现数据集的调用、合并或修改。合并或修改。INPUT 语句具有的四种使用格式:语句具有的四种使用格式:1) 列标识方式列标识方式 (COLUMN)格式:格式: INPUT 变量名变量名1$ 起始列起始列-终止列终止列 变量名变量名2$ 起始列起始列-终止列终止列 变量名变量名n$ 起始列起始列-终止列终止列;注意,字符型变量要跟一个注意,字符型变量要跟一个$字符字符 。语句的功能与
18、特点:语句的功能与特点:输入值严格按指定列号顺序获取。输入值严格按指定列号顺序获取。字符型数据中可镶嵌空格,数据最长为字符型数据中可镶嵌空格,数据最长为200个个字符字符 。缺失值可用缺失值可用空格空格补齐。补齐。例如例如: INPUT NAME $ 1-12 SEX $ 13 AGE 14-15 ;2) 自由格式自由格式 : 格式:格式:INPUT 变量名变量名1$ 变量名变量名2$ 变量名变量名n$ ;语句的功能与特点:语句的功能与特点:数据项之间要至少用一个空格分隔数据项之间要至少用一个空格分隔 。字符型数据中间不能有空格,且最长为字符型数据中间不能有空格,且最长为200个个字符字符 。
19、用用小数点小数点 . 表示数值型数据的缺失值表示数值型数据的缺失值 。每个字段变量要按顺序排列每个字段变量要按顺序排列 。3) 格式输入格式输入: 格式:格式:INPUT 指针控制指针控制 变量输入格式描述符变量输入格式描述符 ; 指针控制:指针控制: N 指针转向第指针转向第N列列 ; (绝对(绝对移动)移动) + N 指针向右移指针向右移N列列 ; (相对移动)(相对移动)常用常用SAS变量输入格式描述符说明:变量输入格式描述符说明:W. :宽度为:宽度为 W 位标准数字,应用实例位标准数字,应用实例: 8. ,指数值,指数值型数据长为型数据长为8个字符,且小数点位为零位。个字符,且小数点
20、位为零位。W.D :含小数点的标准数字,数字总长度为:含小数点的标准数字,数字总长度为W位,位,其中包括小数点占其中包括小数点占1位,小数占位,小数占D位,以及正负符位,以及正负符号占一位,所以所描述数据的整数部分的位数最号占一位,所以所描述数据的整数部分的位数最多为多为W-D-2 位。应用实例位。应用实例: 10.3 ,效果为,效果为523458.356 。$W. :长度为:长度为W的标准字符串,应用实例:的标准字符串,应用实例:$12. ,指字符串长度为指字符串长度为12位。位。COMMAW.D :长度位为:长度位为W的数字,其中小数点占的数字,其中小数点占一位,小数部分占一位,小数部分占
21、D位,正负号占一位,数据的位,正负号占一位,数据的整数部分每整数部分每3位有一个逗号分隔符,逗号也占字符位有一个逗号分隔符,逗号也占字符串宽度。应用实例:串宽度。应用实例: COMMA12.1 ,效果为:,效果为:63,145,690.5 。$CHARW. :宽度为:宽度为W,含有空格的字符串。,含有空格的字符串。MMDDYY8. :日期格式:日期格式 04/24/96 或或04-24-96。MMDDYY10. :日期格式:日期格式 04/24/1996 或或04-24-1996。有格式说明就不需用列方式,列方式与格式方式只有格式说明就不需用列方式,列方式与格式方式只能选其一,不能两者同用。能
22、选其一,不能两者同用。例:例: INPUT NAME $12. 14 SEX $ +2 AGE 2. 25 SALE COMMA10.2 ;4) 日期数据格式:日期数据格式: SAS系统日期数据以系统日期数据以1960年年1月月1日为起始日,系统以距离日为起始日,系统以距离起始日期的总天数记录实际日期。例如起始日期的总天数记录实际日期。例如1962年年3月月20日被日被存储为存储为809,表示此日期与,表示此日期与1960年年1月月1日相距日相距809天。所以,天。所以,当变量的值为当变量的值为日期类型日期类型或或时间类型时间类型时,用户必须规定时,用户必须规定变量变量的输入和输出格式的输入和
23、输出格式。SAS软件包对日期变量和时间变量提供了多种的处理方式。软件包对日期变量和时间变量提供了多种的处理方式。读入日期值时要说明所使用的日期值格式。输出显示时也读入日期值时要说明所使用的日期值格式。输出显示时也必须给定一种日期显示格式,否则系统直接输出总天数。必须给定一种日期显示格式,否则系统直接输出总天数。例如例如1997年年12月月20日,可用下列日期格式表示:日,可用下列日期格式表示:MMDDYY6. 月日年月日年6位位 例:例: 122097MMDDYY8. 月日年月日年8位位 例:例: 12/20/97 或或12-20-97 或或12201997DDMMYY6. 日月年日月年6位位
24、 例:例: 201297YYMMDD6. 年月日年月日6位位 例:例: 971220DATE7. 日月年日月年7位位 例:例: 20DEC97DATE9. 日月年日月年9位位 例:例: 2ODEC1997 MMDDYY10. 月日年月日年10位位 例:例: 12/20/1997 或或 12-20-1997例例2.3 日期与时间的格式应用:日期与时间的格式应用:(data2_3.sas)DATA DAYS ; INPUT BIRTHDAY MMDDYY8. +1 INDAY MMDDYY8. +1 TESTDAY DATE9.; CARDS; 08-04-83 07/14/90 20SEP199
25、0 11-14-83 07/26/90 20SEP1990 ;注意注意:输出的日期格式长度一般应与日期的输入格式输出的日期格式长度一般应与日期的输入格式一致。一致。 如输入格式为如输入格式为MMDDYY6. ,输出格式可以是,输出格式可以是MMDDYY6. 或或MMDDYY8. 。如果输出格式为。如果输出格式为MMDDYY10. ,就会产生输出错误。,就会产生输出错误。5) 组格式输入:组格式输入: 组格式输入语法格式:组格式输入语法格式: INPUT (变量变量1-变量变量N ) (输入格式描述符输入格式描述符); 例例a: INPUT (x1-x5) (4.) ; /*变量变量x1-x5最
26、最多为多为4位整数位整数*/ 例例b: INPUT (aa bb ) ($8. ,7.2 ) ; (变量(变量aa为为8位长的字符型数据,变量位长的字符型数据,变量bb为为7位长,位长,且小数为且小数为2位的数值型数据)位的数值型数据) 例例c: INPUT (Name price1-price6 ) ($12. 6*8.1);(变量变量Name为为12位长的字符,位长的字符,price1-price6共共6个变个变量均为量均为8位长的数值,小数为位长的数值,小数为1位位)6) 高级输入格式控制描述符:高级输入格式控制描述符:行保持标示符行保持标示符 和和 : CARDS语句中的数据一行为一条
27、观测语句中的数据一行为一条观测记录,用多条记录,用多条INPUT语句读入。语句读入。 : CARDS语句中的数据一行为多条观语句中的数据一行为多条观测记录,用一条测记录,用一条INPUT 语句读入。语句读入。/ : 从下一行第一列开始读数据。从下一行第一列开始读数据。#N :指明从第:指明从第N行开始读数据行开始读数据 。例例2.4 数据步中所有的数据步中所有的INPUT语句完成一个观测记录的数据语句完成一个观测记录的数据输入输入程序程序Data2_4.sas DATA A ; INPUT NAME $ AGE ; /* 此语句应改写为此语句应改写为 : INPUT NAME $ AGE ;*
28、/ INPUT WEIGHT ; CARDS ; ZHANG 23 75.6 XIAO 12 32 WEI 14 30 ; RUN ; PROC PRINT ; RUN ;程序说明:程序说明:PRINT过程是将数据集输出到过程是将数据集输出到OUTPUT窗口,在窗口,在以前以前DOS版的版的SAS系统软件中,通常使用系统软件中,通常使用PRINT过程来查过程来查看生成的看生成的SAS数据集。数据集。2.2.3 DATA步中的常用语句步中的常用语句1. 赋值语句与表达式赋值语句与表达式在在SAS中用赋值语句计算一个表达式的结果并将结中用赋值语句计算一个表达式的结果并将结果保存到赋值运算符果保存到
29、赋值运算符“=”左侧的变量当中。格式左侧的变量当中。格式为:为: 变量名变量名 = 表达式表达式;例如:例如: avg=(math+Chinese+English)/3;isfcat = (sex=f);y=Log(x)*2;newprice = .; 其中第一个赋其中第一个赋值语句用一个公式计算平均分数。第二个表达式值语句用一个公式计算平均分数。第二个表达式利用逻辑运算生成一个取值为利用逻辑运算生成一个取值为0或或1的变量,当性的变量,当性别变量别变量“sex”的值为的值为f时,计算结果为时,计算结果为1,否则为,否则为0。第三个表达式使用对数函数和乘方运算。第四。第三个表达式使用对数函数和
30、乘方运算。第四个表达式给变量赋了缺失值。注意:数值型变量个表达式给变量赋了缺失值。注意:数值型变量的缺失值为点的缺失值为点“.”,字符型变量的缺失值为空格,字符型变量的缺失值为空格“ ”。5. 分支语句分支语句SAS系统提供系统提供2种实现分支结构控制的语句,种实现分支结构控制的语句,IF语句语句和和SELECT语句。下面我们将分别介绍两种语语句。下面我们将分别介绍两种语句的语法格式、功能与使用实例。句的语法格式、功能与使用实例。IF语句语句语法格式:语法格式: IF 逻辑表达式逻辑表达式 THEN 语句语句1; ELSE 语句语句2;语句功能:当逻辑表达式的计算结果为真时,执行语句功能:当逻
31、辑表达式的计算结果为真时,执行语句语句1,否则执行语句,否则执行语句2。If x0 then put x is a positive number;If x0 then DO; put x is a positive number; x=2*x; put x=; END; if x=0 then x=2*x;Else x=-x;2)SELECT语句语句SAS的的SELECT 结构提供了更为灵活的多分支控制结构提供了更为灵活的多分支控制结构。结构。SELECT结构有两种基本用法。结构有两种基本用法。SELECT语法结构语法结构1:SELECT (选择表达式选择表达式);WHEN(值值列表列表1)
32、 语句语句1;WHEN(值列表值列表2) 语语句句2;OTHERWISE 语句语句n;END; 其中其中“选选择表达式择表达式”是一个计算结果为数值或字符的表达是一个计算结果为数值或字符的表达式,式,“值列表值列表”由一个或者若干项构成,各项之由一个或者若干项构成,各项之间用逗号分隔,每项可以是一个与选择表达式具间用逗号分隔,每项可以是一个与选择表达式具有相同数据类型的常量或表达式。有相同数据类型的常量或表达式。“语句语句”可以可以是单个语句或复合语句。是单个语句或复合语句。Select(month); when(Feb,Mar,Apr) put spring; when(May,Jun,Ju
33、l) put summer; otherwise put autumn or winter;End;Select; when(age=12) put 少年少年; when(age=50 then CONTINUE; z = Log(x); output ; format x 8.3 y 20.5 z 20.5; end;run;这个程序对这个程序对100到到5000之间的值每隔之间的值每隔50计算一次平计算一次平方根,规定变量方根,规定变量x,y,z的输出格式分别为的输出格式分别为8.3、20.5、20.5 。如果平方根值大于等于。如果平方根值大于等于50则不计算对数,则不计算对数,而直接考虑
34、下一个值。而直接考虑下一个值。DO WHILE当型循环当型循环DO WHILE 循环的语法结构:循环的语法结构:DO WHILE(循环继续条件循环继续条件) ;循环循环体语句体语句;END; 循环继续条件:逻辑循环继续条件:逻辑表达式。表达式。 循环体语句:循环体语句:SAS程序语句组。语句程序语句组。语句功能:功能:语句开始执行时,程序首先判断循环继语句开始执行时,程序首先判断循环继续条件表达式计算结果是否为真续条件表达式计算结果是否为真,若计算结果,若计算结果为真,则执行循环体语句。循环体语句每执行为真,则执行循环体语句。循环体语句每执行一次,则再检验循环继续条件表达式一次,如一次,则再检
35、验循环继续条件表达式一次,如此重复,直到循环继续条件表达式计算结果为此重复,直到循环继续条件表达式计算结果为假,循环结束。假,循环结束。 判断判断1333333是不是素数是不是素数Data; x=1333333; i=3; Do while (mod(x,i)=0); i=i+2; End; if i=5); n=n+1; put n=; end;Run;7. 常用函数常用函数1) 算术函数(算术函数(Arithmetic Functions)ABS(x) :求:求x的绝对值。的绝对值。 例如例如ABS(-56.3)=56.3 。MAX(x1,x2,xn) :求所有自变量中的最大一个。:求所有
36、自变量中的最大一个。 例如例如MAX(52,15,67,89)=89 。MIN(x1,x2,xn) :求所有自变量中的最小一个。例如:求所有自变量中的最小一个。例如MIN(52,15,67,89)=15 。MOD(x,y) :求:求x除以除以y的余数。的余数。 例如例如MOD(24,3)=0 。SIGN(x) :计算:计算x的符号,结果为的符号,结果为1、-1、0。例如。例如SIGN(-5)=-1,SIGN(20)=1,SIGN(0)=0。SQRT(x) :求:求x的平方根。的平方根。 例如例如SQRT(225)=15 。方法方法2:1.可以先将原始数据输入到可以先将原始数据输入到Excel文
37、件中,文件中,Excel表表中第一行为变量名(中第一行为变量名(变量名不能使用汉字变量名不能使用汉字););第二行开始输入数据,然后保存文件并关闭该第二行开始输入数据,然后保存文件并关闭该文件。注意文件名也文件。注意文件名也不能使用汉字不能使用汉字。2.使用使用SAS系统主菜单系统主菜单Import Data命令,按照命令,按照1.4节中的操作将节中的操作将Excel数据文件导入生成数据文件导入生成SAS数据数据集。集。3.如果生成的如果生成的SAS数据集名为数据集名为CCC.studen,可以,可以在在EDITOR窗口中输入以下语句:窗口中输入以下语句:proc print data=CCC
38、.student;run;然后点击然后点击Submit按钮执行该过程,在按钮执行该过程,在OUTPUT窗口窗口中将输出该数据集内容。中将输出该数据集内容。选择变量选择变量Data class3 (drop=test1 test2 test3 test4);Set class2;Run;Data class3 (keep=id average total);Set class2;Run;选择观测选择观测Data a ;Set vital (firstobs=12 obs=53 keep= country birth);Run;定义数组定义数组数值型数组数值型数组Array tests(3) ma
39、th chinese english (0,0,0);Array table(2,2) x11 x12 x21 x22;二维数组元素按行排列二维数组元素按行排列字符型数组字符型数组Array names(3) $10 child father mother;SAS数据集建立-用input和cards语句直接输入data child; /*建立临时数据集建立临时数据集child.sd2,自动放在自动放在saswork子目录下子目录下*/input id x1 $ x2 x3 x4 x5 x6; /* 指明要输入的变量 , $为字符型变量*/cards; /*标志数据区开始,数据之间以一个或几个空
40、格分隔*/ 1 m 32 95.5 14.0 53.5 49.64 2 m 35 92.0 13.0 52.0 41.61 3 m 33 89.0 12.5 53.5 35.81 254 m 176 168.0 53.5 82.0 100.14 255 f 30 91.0 11.0 48.0 35.39 256 f 33 91.0 11.5 47.0 44.98 521 f 178 163.0 51.0 79.0 87.42 ; /* 标志数据区结束,分号必须单独一行 */ run;SAS中的常用变量类型数值型:不需特殊定义数值型:不需特殊定义字符型:字符型: 定义方式定义方式 变量名变量名
41、$ $日期型:多种形式如日期型:多种形式如: : 变量名变量名 mmddyy6. mmddyy6. 实际记录为距实际记录为距1960/01/011960/01/01的天数的天数其它数据库中的逻辑型、备注型变量在其它数据库中的逻辑型、备注型变量在SASSAS中均为中均为字符型变量。日期型变量转进字符型变量。日期型变量转进SASSAS后一般也变为字后一般也变为字符型变量。符型变量。 SAS数据集建立-用input和cards语句直接输入data a1;data a1;input id x1 $ x2 x3 x4;input id x1 $ x2 x3 x4;cards;cards;1 m 32 9
42、5.51 m 32 95.52 m 35 92.0 13.02 m 35 92.0 13.03 m 33 89.0 12.53 m 33 89.0 12.5; ;proc print;proc print;run;run;结果结果: :OBS ID X1 X2 X3 X4OBS ID X1 X2 X3 X41 1 m 32 95.5 2.01 1 m 32 95.5 2.02 3 m 33 89.0 12.52 3 m 33 89.0 12.5data a1;data a1;input id x1 $ x2 x3;input id x1 $ x2 x3;cards;cards;1 m 32 9
43、5.51 m 32 95.52 m 35 92.0 13.02 m 35 92.0 13.03 m 33 89.0 12.53 m 33 89.0 12.5; ;proc print;proc print;run;run;结果结果: :OBS ID X1 X2 X3OBS ID X1 X2 X3 1 1 m 32 95.5 1 1 m 32 95.5 2 2 m 35 92.0 2 2 m 35 92.0 3 3 m 33 89.0 3 3 m 33 89.0SAS数据集建立不分行符不分行符的使用的使用 data data esresr; ; input x ; input x ; /*/*每
44、读入一天记录后每读入一天记录后, ,数据指针保持原位不换行数据指针保持原位不换行, , 继续读下一条记录继续读下一条记录* */ / cards; cards; 3 9 8 6 5 5 7 3 10 8 10 4 3 9 8 6 5 5 7 3 10 8 10 4 ; ; proc means; proc means; run; run; 结果:结果: Analysis Variable : XAnalysis Variable : X N Mean Std Dev Minimum Maximum N Mean Std Dev Minimum Maximum - - 12 6.5000000
45、2.5405797 3.0000000 10.0000000 12 6.5000000 2.5405797 3.0000000 10.0000000 - -SAS数据集建立缺失值的输入- 以 . 表示,缺失值不进入分析 data child;data child; input id x1 $ x2 x3 x4 x5 x6; input id x1 $ x2 x3 x4 x5 x6; cards; cards; 1 m 32 95.5 14.0 53.5 49.64 1 m 32 95.5 14.0 53.5 49.64 2 m 35 . 13.0 52.0 41.61 2 m 35 . 13.
46、0 52.0 41.61 3 m 33 89.0 12.5 53.5 35.81 3 m 33 89.0 12.5 53.5 35.81 254 m 176 168.0 53.5 82.0 100.14 254 m 176 168.0 53.5 82.0 100.14 255 f 30 91.0 11.0 48.0 35.39 255 f 30 91.0 11.0 48.0 35.39 256 f 33 91.0 11.5 47.0 44.98 256 f 33 91.0 11.5 47.0 44.98 521 f 178 163.0 51.0 79.0 87.42 521 f 178 163
47、.0 51.0 79.0 87.42 ; ;proc means;proc means;run;run;SAS数据集建立结果结果Variable N Mean Std Dev Minimum MaximumVariable N Mean Std Dev Minimum Maximum - - ID 7 184.5714286 194.9639771 1.0000000 521.0000000 ID 7 184.5714286 194.9639771 1.0000000 521.0000000 X2 7 73.8571429 70.4779601 30.0000000 178.0000000 X
48、2 7 73.8571429 70.4779601 30.0000000 178.0000000 X3 6 116.2500000 38.2410120 89.0000000 168.0000000 X3 6 116.2500000 38.2410120 89.0000000 168.0000000 X4 7 23.7857143 19.4825930 11.0000000 53.5000000 X4 7 23.7857143 19.4825930 11.0000000 53.5000000 X5 7 59.2857143 14.7361719 47.0000000 82.0000000 X5
49、 7 59.2857143 14.7361719 47.0000000 82.0000000 X6 7 56.4271429 26.2540446 35.3900000 100.1400000 X6 7 56.4271429 26.2540446 35.3900000 100.1400000 - -SAS数据集建立如已存在一纯文本文件如已存在一纯文本文件c:child.txtc:child.txt,内容如下:,内容如下: 1 m 32 95.5 14.0 53.5 49.641 m 32 95.5 14.0 53.5 49.64 2 m 35 92.0 13.0 52.0 41.61 2 m
50、35 92.0 13.0 52.0 41.61 3 m 33 89.0 12.5 53.5 35.81 3 m 33 89.0 12.5 53.5 35.81 254 m 176 168.0 53.5 82.0 100.14 254 m 176 168.0 53.5 82.0 100.14 255 f 30 91.0 11.0 48.0 35.39 255 f 30 91.0 11.0 48.0 35.39 256 f 33 91.0 11.5 47.0 44.98 256 f 33 91.0 11.5 47.0 44.98 521 f 178 163.0 51.0 79.0 87.42 52
51、1 f 178 163.0 51.0 79.0 87.42 可用可用infileinfile 直接读入:直接读入: DataData child; child; InfileInfile c:child.txtc:child.txt; Input id x1 $ x2 x3 x4 x5 x6; Input id x1 $ x2 x3 x4 x5 x6; RunRun; ;SAS数据集建立-Infile 和 input语句利用file下拉菜单中的import功能 ,可转入:文本型数据:空格分隔、逗号分隔、制表键分隔文本型数据:空格分隔、逗号分隔、制表键分隔Dbase II Dbase II 和和
52、 IIIIII数据库(数据库(* *.dbf.dbf)ExcelExcel数据库(数据库(7.07.0版及以下,版及以下,* *. .xlsxls)。)。SAS8SAS8以上可以上可转入转入Excel97Excel97及及20002000的数据库的数据库Epi Info的数据可在Epi Info中用export模块转成*.sas文件(SAS的程序文件),在edit窗打开后,加上run;语句后提交运行即可。有的数据可通过粘贴的方法贴到edit窗后,加入input和cards等语句,生成sas数据集。SAS数据集建立-从其他数据集转入SAS数据集名称的表示方式:两级文件名库关联名库关联名. . 数
53、据集名数据集名如如 work.esrwork.esr ,dw.esrdw.esr(.sd2 .sd2 省略)省略)库关联名代表硬盘上某一(子)目录,库关联名代表硬盘上某一(子)目录,esresr即放在该目录即放在该目录下下定义库关联名:用 libname 命令 格式:格式:libnamelibname 库关联名库关联名 “ 盘符盘符:路径路径”; ; 如:如: libnamelibname dwdw c:teachc:teach; dwdw 为库关联名,代表路径为库关联名,代表路径c:teachc:teach;库关联名可任意取,一旦定义,只要不退出库关联名可任意取,一旦定义,只要不退出SASS
54、AS,始终有,始终有效()。但路径必须实际存在效()。但路径必须实际存在SAS数据集建立-永久数据集和临时数据集临时数据集:每次启动每次启动SASSAS时,会自动开辟一个临时存储区,用于存时,会自动开辟一个临时存储区,用于存储储datadata步或其它过程生成的步或其它过程生成的SASSAS数据集。它库关联名为数据集。它库关联名为WORKWORK,代表,代表 sassasworksassaswork子目录。子目录。一旦退出一旦退出sassas,临时存储区自动删除,存放在其中的数,临时存储区自动删除,存放在其中的数据集也会被自动删除。即据集也会被自动删除。即 的的sassasworksassas
55、work子目录下的数子目录下的数据集被删除,称为临时数据集据集被删除,称为临时数据集临时数据集的库关联名默认为临时数据集的库关联名默认为workwork,均省略不写。,均省略不写。 如如 data data esresr; (实际为(实际为work.esrwork.esr) SAS数据集建立-永久数据集和临时数据集永久数据集:通过两级文件名的形式,将生成的数据集存放到通过两级文件名的形式,将生成的数据集存放到sasworksaswork 以以外的任意路径中(库关联名所指向的路径),即可以生成永外的任意路径中(库关联名所指向的路径),即可以生成永久数据集,退出时不会被删除。久数据集,退出时不会被
56、删除。如:如:libnamelibname dwdw c:teachc:teach; data dw.esr; /*在c:teach 生成esr .sd2数据集*/ input x1 x2 x3 ; (略) 退出SAS后再进入: libname aa c:teach;库关联名一旦定义库关联名一旦定义 ,它所代表的目录下所有,它所代表的目录下所有SASSAS数据集均可数据集均可使用,不必再定义。使用,不必再定义。 SAS数据集建立-永久数据集和临时数据集SAS数据集建立-永久数据集和临时数据集LIBNAME DS C:/DATA;PROC CHARTDATA=DS.AA; VBAR EXCHAN
57、GE; TITLE 成交金额数据的缺省条成交金额数据的缺省条形图形图;RUN;注:注:Proc 步的操作对象总是步的操作对象总是最新生成的最新生成的SAS数据集。数据集。只有只有proc步时,也可通过步时,也可通过在在proc语句后加语句后加data=来来指定要分析的数据集。指定要分析的数据集。data a;set DS.AA;proc print;run; Data b;Set a;Run;从从已建立的已建立的SASSAS数据集中数据集中读入数据建立新的读入数据建立新的SASSAS数据集数据集-set-set命令命令变量重命名: rename 旧变量名=新变量名; 如 rename id=x
58、0; 变量赋值或修改变量值: 变量名=表达式; 或结合if语句进行条件赋值: if then ; else ;子集化:用keep或drop语句整理变量名表 keep ; drop ;SAS数据集的整理-变量操作data b1;data b1;set child;set child;if id200 then group=1;if id200 then group=1; else group=2; else group=2;rename id=x0; rename id=x0; keep id x1 x2 group;keep id x1 x2 group;proc print;proc pri
59、nt;run;run;注:注:keep id x1 x2 groupkeep id x1 x2 group等价于等价于 drop x3-x6;drop x3-x6; OBS X0 X1 X2 GROUP OBS X0 X1 X2 GROUP 1 1 m 32 11 1 m 32 1 2 2 m 35 12 2 m 35 1 3 3 m 33 13 3 m 33 1 4 254 m 176 24 254 m 176 2 5 255 f 30 25 255 f 30 2 6 256 f 33 26 256 f 33 2 7 521 f 178 27 521 f 178 2SAS数据集的整理-变量操
60、作(例)数据子集化数据子集化 记录输出 if then output 数据集; 记录删除 if then delete;data b1;data b1;set child;set child;if x1=m then output; keep x1 x5 group;proc print;run; OBS ID X1 X2 X3 X4 X5 X6OBS ID X1 X2 X3 X4 X5 X6 1 1 m 32 95.5 14.0 53.5 49.64 1 1 m 32 95.5 14.0 53.5 49.64 2 2 m 35 92.0 13.0 52.0 41.61 2 2 m 35 92
61、.0 13.0 52.0 41.61 3 3 m 33 89.0 12.5 53.5 35.81 3 3 m 33 89.0 12.5 53.5 35.81 4 254 m 176 168.0 53.5 82.0 100.14 4 254 m 176 168.0 53.5 82.0 100.14SAS数据集的整理-记录操作data b1;set child; keep x1 x5 group;If x1=m then output; Proc print;Run; OBS X1 X5 group 1 m 53.5 1 2 m 52.0 1 3 m 53.5 1 4 m 82.0 2data b
62、1 b2;data b1 b2;set child; set child; If x1=m then output b1 ;Else output b2;Else output b2;RunRun;SAS数据集整理-记录操作SAS数据集整理-记录操作data a;input id x1 x2 ;cards;1 11 122 21 223 41 424 411 4225 51 52;data b; input id x3 ;cards;1 13 3 33 4 43 5 53 5 533;run;data c; set a b; proc print ; run; OBS ID X1 X2 X3
63、1 1 11 12 . 2 2 21 22 . 3 3 41 42 . 4 4 411 422 . 5 5 51 52 . 6 1 . . 13 7 3 . . 33 8 4 . . 43 9 5 . . 53 10 5 . . 533n 纵向合并:set ;SAS数据集整理-记录操作排序排序 proc sort;by ;横向合并横向合并: 一般要先按识别字段排序一般要先按识别字段排序merge ;by 识别字段;data c;merge a b;by id;proc print;run;OBS ID X1 X2 X3 1 1 11 12 13 2 2 21 22 . 3 3 41 42 33
64、 4 4 411 422 43 5 5 51 52 53 6 5 51 52 533 SAS数据集整理-记录操作 data c; merge a b;proc print; run; OBS ID X1 X2 X3 1 1 11 12 13 2 3 21 22 33 3 4 41 42 43 4 5 411 422 53 5 5 51 52 533 生成SAS数据集直接输入数据生成SAS数据集在在DATA步直接输入数据步直接输入数据的一般形式的一般形式:DATA DATA SAS-data-setSAS-data-set ; ; 变量属性设定语句变量属性设定语句; ; INPUT INPUT 语句语句; ; 其它语句其它语句; ; CARDS; CARDS; 数据行数据行; ; RUN; RUN;在在DATA步直接输入数据的例子步直接输入数据的例子: data da1; input x y z; sum=x+y+z; cards; 1 3.1 5 3 2.3 7 6 3.4 6 ; run;( (见见BASE43.SAS)BASE43.SAS)