第三章SAS数据集的基本操作ppt课件.ppt

上传人:牧羊曲112 文档编号:1469141 上传时间:2022-11-28 格式:PPT 页数:109 大小:968KB
返回 下载 相关 举报
第三章SAS数据集的基本操作ppt课件.ppt_第1页
第1页 / 共109页
第三章SAS数据集的基本操作ppt课件.ppt_第2页
第2页 / 共109页
第三章SAS数据集的基本操作ppt课件.ppt_第3页
第3页 / 共109页
第三章SAS数据集的基本操作ppt课件.ppt_第4页
第4页 / 共109页
第三章SAS数据集的基本操作ppt课件.ppt_第5页
第5页 / 共109页
点击查看更多>>
资源描述

《第三章SAS数据集的基本操作ppt课件.ppt》由会员分享,可在线阅读,更多相关《第三章SAS数据集的基本操作ppt课件.ppt(109页珍藏版)》请在三一办公上搜索。

1、许振宇 山东大学数学学院 2006,第三章 SAS数据集的基本操作,程序实现,许振宇 山东大学数学学院 2006,1 SAS程序初步,SAS程序,程序步(Step),环境设置语句,数据步(Data Step),过程步(Proc Step),用于创建、修改数据集。以DATA语句开头。,实现面向数据集的操作,包括处理、计算、分析、呈现等功能。以PROC语句开头。,许振宇 山东大学数学学院 2006,说明:1. 命令语句SAS程序步的基本组成单位。1)一般形式 :关键词 操作对象 选项 选项1|选项2|; 2)形式:开始标志:一个用于表示命令动作的关键词,结束标志:分号“;” 。根据需要还可能包括若

2、干可选项。 3)位置:命令语句可以在行的任何位置开始,一条语句可以占据一行或多行,多条语句也可以写在同一行。语句中的各项之间用空格隔开。 4)字符:命令语句中的英文字母不区分大小写,汉字只允许出现在字符串中。,许振宇 山东大学数学学院 2006,2. 数据步的一般形式 : DATA 数据集名 选项; 命令语句序列; RUN; 3. 过程步的一般形式 : PROC 过程名 过程选项; 过程语句序列; RUN; 4. 程序步的结束: 遇到RUN语句或后面一个程序步开始时。表示前面的语句可以提交运行了。,许振宇 山东大学数学学院 2006,2 有关库和逻辑文件的程序语句,1. 标记一个数据库一般形式

3、: LIBNAME 库标记 库引擎 库的实际物理地址 选项; 功能:建立指定的库标记与其物理位置的连接。说明:库标记必须指定,见库标记的命名规则 ;数据源即文件夹的物理位置,一般从根目录开始指定其路径,并用一对引号( 或 )引起来; 库引擎根据创建库中数据集时的SAS版本号可选V6或V8,缺省值是当前SAS系统所用的引擎。例:libname dst d:dst; run;,许振宇 山东大学数学学院 2006,2. 取消库标记一般形式1:LIBNAME 库标记 ; 功能:取消指定的库标记与其物理位置的连接。 一般形式2:LIBNAME _ALL_ ; 功能:取消所有用户设置的库标记与其物理位置的

4、连接。,许振宇 山东大学数学学院 2006,3. 显示库的属性 一般形式1:LIBNAME 库标记 LIST; 功能:显示指定库的属性,包括库引擎、物理位置等。 一般形式2:LIBNAME _ALL_ LIST; 功能:显示用户指定的所有库的属性,包括库引擎、物理位置等。,许振宇 山东大学数学学院 2006,4复合库的设置一个库可以对应于多个物理位置,即多个文件夹。设置语句: LIBNAME 库标记 (位置1 位置2 ); 功能:建立指定的库标记与其若干物理位置的连接。说明:位置可以是用引号括起来的实际物理地址,也可以是一个已经设定的库标记。例:libname lib1 D:dstdata1;

5、libname lib2 (lib1 D:dstdata2); libname lib3 (D:dstdata1 D:dstdata2);,许振宇 山东大学数学学院 2006,5指定逻辑文件名 一般形式: FILENAME 逻辑文件名 文件的物理位置 ;功能:创建指定的文件的逻辑文件名与其物理位置的连接。 例:filename flight D:dstflight.dat;,许振宇 山东大学数学学院 2006,6. 查看库的内容 实现:过程步DATASETS一般形式: PROC DATASETS LIB = 库标记; RUN; 功能:在Log窗口中显示库的属性和它所包含的所有成员列表。 例:p

6、roc datasets lib=sasuser; run;Proc contents data=sashelp.class;Run;,许振宇 山东大学数学学院 2006,结果如下:,许振宇 山东大学数学学院 2006,3 生成SAS数据集,1. 数据步(Data Step)简介1.1 主要功能:创建SAS数据集。说明:数据必须以 SAS数据集的格式保存才能被许多SAS过程处理。1.2 创建SAS数据集的途径:直接在SAS系统中输入数据;import外部导入;用数据步(Data Step)将外部数据文件转换为SAS数据集;用SAS/ACESS模块访问其它数据库管理系统。1.3 数据在用数据步中

7、的输入方式: 直接在数据步中输入数据;将数据保存在文本文件中,数据步读取并生成数据集。,许振宇 山东大学数学学院 2006,图1 数据集中数据的来源,许振宇 山东大学数学学院 2006,2. 数据步的一般形式 : DATA 数据集名; INFILE 文件名 选项; INPUT 变量名 变量输入设定; 其他SAS语句; RUN; 功能:读取数据生成SAS数据集。,许振宇 山东大学数学学院 2006,说明:DATA语句:标志数据步的开始命名要创建的数据集(数据集名采用两级文件名的方式指定)。INFILE语句:用于指定要读取的源文件,源文件可以使用逻辑文件名,也可以输入其物理地址和全名(此时需要用一

8、对单引号或双引号将源文件名括起来); 必须放在INPUT语句之前;如果要在程序中直接嵌入数据,就用CARDS语句代替INFILE语句;也可以用infile datalines;INPUT语句:描述如何读取每一条观测,包括:读取源文件中的数据行,变量的命名,变量的读取模式;,许振宇 山东大学数学学院 2006,源文件:是扩展名为.dat或.csv的文本文件,其中:数据行称为记录,对应于数据集中的观测,一个数据行中的若干列组成一个具有特定含义的数据,称为字段,对应于数据集中的变量 ;变量的读取模式: 按列模式(Column) 字段开始列固定格式化模式(Formatted) 列举模式(List) 有

9、固定字段分隔符命名模式(Named) 各模式分别对应不同的INPUT语句格式。 RUN语句:标志当前数据步的结束。 在数据步中我们还可以根据需要加入其它的SAS语句。,许振宇 山东大学数学学院 2006,2系统执行数据步的过程 编译数据步执行数据步,许振宇 山东大学数学学院 2006,2.1 编译阶段1)检查语句是否有词法或语法错误;2)将数据步翻译为机器代码; 3)在内存中创建一个输入缓冲区(Input Buffer),用来存放源文件中的一条记录(一般是一行);,许振宇 山东大学数学学院 2006,4)在内存中创建一个PDV(程序数据向量Program Data Vector)用来临时存放当

10、前观测;其中_N_表示当前处理的记录序号,_ERROR_是操作出错标志(0表示正常,1表示出错)。5)根据PDV存储的信息创建数据集的描述部分。,许振宇 山东大学数学学院 2006,2.2 执行阶段 1)将PDV中的所有变量初始化为缺省值; 2)顺序执行数据步中的每条语句:3) INPUT语句将源文件(INFILE语句指定)中的下一条记录(经输入缓冲区)读入PDV; 4)其它语句(如果有)修改PDV中的数据; 5) PDV中的数据在该数据步的结束处被写入正在创建的数据集; 6)回到数据步的开始,将PDV中的所有变量初始化为缺省值; 7)重复以上步骤直到外部文件结束。,许振宇 山东大学数学学院

11、2006,图2 数据步执行的流程图,许振宇 山东大学数学学院 2006,图3 读取外部文件生成数据集示意图,许振宇 山东大学数学学院 2006,3. 在数据步中直接输入数据一般形式: DATA 数据集名; INFILE CARDS | DATALINES; INPUT 变量名 变量输入设定; CARDS | DATALINES; 数据块 ; RUN; 功能:将包含在数据步中的数据块按照指定格式输入到新建的数据集中。,许振宇 山东大学数学学院 2006,说明:1)INFILE 语句:其中的CARDS或DATALINES选项告诉系统数据在数据步中直接输入,而不是读自源文件;2)CARDS或DATA

12、LINES语句:标明了数据块的开始;3)数据块:其中的数据形式由INPUT语句中的变量输入模式决定; 数据块中的每行数据需顶头写;数据块输入完毕,位于下一行开始的分号说明了数据块的结束。,许振宇 山东大学数学学院 2006,例1:data tmp1; input x y; cards; 12 34 56 78 90 23 ;run; 说明:1)新建数据集 的二级文件名是work.tmp1 ;2)x、y分别是数据集中的变量,系统根据随后输入的数据设置它们的格式。,运行结果:,许振宇 山东大学数学学院 2006,以上数据步也可以写作如下等价形式:data tmp1; input x y ; car

13、ds; 12 34 56 78 90 23 ;run;运行结果同上。说明:跟踪符号“” 的作用:保留前一个INPUT语句使用的数据行供下一语句使用; :在一个循环结束时仍然保留数据供下一循环使用。,许振宇 山东大学数学学院 2006,4读取外部文件生成数据集4.1 按列模式(Column)1)适合的源文件数据固定在某些列中;数据中只包含标准的字符和数字。2) INPUT语句的一般形式: INPUT 变量名 $ 开始列 - 结束列 ; 3)说明:变量名:指定要创建的变量名称; $:可选项,出现说明变量是字符型的,否则说明变量是数值型的; 开始列C1 - 结束列C2:说明了变量对应的字段在源文件中

14、的读取位置,即对每行数据从第C1个字符开始读取,直到第C2个字符; 在一条INPUT语句中可为多个变量定义输入方式,它们之间以空格分隔。,许振宇 山东大学数学学院 2006,4)例子 例2:假设有如下所示的文本文件flight.dat,描述了飞机航班的日期、目的地和乘客人数。 01MAR90LON198 01MAR90FRA207 01MAR90LON205 提交以下程序: data flight; infile d:dstflight.dat; input date $ 1-7 dest $ 8-10 boarded 11-13;run;proc print data= work.fligh

15、t;run;,许振宇 山东大学数学学院 2006,结果如下:说明:程序中包含了用于创建数据集work.flight的数据步,和用于显示数据集work.flight内容的过程步PRINT。在没有给出输入输出格式的情况下,各变量的输入输出格式都采用默认值,即长度为8。 源数据行中的字段可以按照任意次序来读,也可以重复读取,例如: input boarded 11-13 date $ 1-7 dest $ 8-10 year 6-7;,许振宇 山东大学数学学院 2006,对于数值型变量来说,源文件中只能提供标准数值数据值,即只能包含数字、小数点、正负号、E。而不能有$、逗号等符号。某变量在源文件中对

16、应列全为空格,则该变量读入的是一个缺省值。按列模式也可以用于在数据步中直接读入数据例3:data flight; infile datalines; input date $ 1-7 dest $ 8-10 boarded 11-13; datalines;01MAR90LON19801MAR90FRA20701MAR90LON205;run; 此数据步提交结果与例2一样。,许振宇 山东大学数学学院 2006,4.2 格式化(Formatted)模式1) 适合的源文件字段具有固定格式 含有不标准数据2) 一般形式:INPUT 输入指针控制 变量名 输入格式 ;,许振宇 山东大学数学学院 200

17、6,3)说明:输入指针控制:将输入指针控制在源文件数据行的某个位置,作为变量读取的开始列号。在读数据行的过程中,输入指针自动向后移动。输入指针控制方式有两种: n:表示将输入指针移动到第n列(绝对位置); n:表示将输入指针从当前位置向后/向前移动n列(相对位置)。 变量名:指定要创建的变量名称; 输入格式:指定变量的输入格式,即如何读取该变量,一般形式如下: $输入格式名w.d在一条INPUT语句中可为多个变量定义输入方式,它们之间以空格分隔。,许振宇 山东大学数学学院 2006,4)例子例4:例2中的数据步可以写为如下等价形式:data flight; infile d:dstflight

18、.dat; input date $7. 8 dest $3. 11 boarded 3.;run;或data flight; infile d:dstflight.dat; input date $7. dest $3. boarded 3.;run;,许振宇 山东大学数学学院 2006,说明:输入格式仅指出如何读取该变量的数据,不影响变量的属性,也不影响输出格式; 变量的读取顺序是任意的; 读第一个变量的缺省输入指针的绝对位置为第一列(1),读第n+1(n1)个变量的输入指针的绝对位置=第n个变量的输入指针的绝对位置+第n个变量的输入格式中的长度。,许振宇 山东大学数学学院 2006,4.

19、3 列举模式1)适合的源文件字段长度可以不同字段之间需要用固定的分隔符号分开2)一般形式: DATA 数据集名; INFILE 文件名 DLM= DSD; INPUT 变量名 $ | :输入格式 ; RUN; Class.dat dsd,许振宇 山东大学数学学院 2006,3)说明:在此种输入模式中,系统在源文件的数据行中依次读取与INPUT语句中所列出的变量相对应的值,保存到数据集中。INPUT语句中的变量顺序必须对应于源数据行中字段的从左到右的顺序,不允许跳跃或重复读取。当源文件某一数据行中用分隔符间隔的字段个数少于INPUT语句中变量的个数,则系统自动从下一行的第一列读取字段。该观测读取

20、完毕,下一行中剩下的字段将被舍弃。下一条观测将从再下一行的第一列读起。系统默认的分隔符是空格,用户也可通过INFILE语句中的DLM选项自行设置。注意设置的分隔符两端需加引号,如:dlm=, 。,许振宇 山东大学数学学院 2006,INFILE语句中的DSD选项有如下作用:另外在读取数据时,将同一数据行中最外层的引号对中间的内容作为字符串读入。这样可以解决字符型字段中包含分隔符的问题。 ,许振宇 山东大学数学学院 2006,INPUT语句中的变量名后面的$号用于指明该变量是字符型的,不写则说明该变量是数值型的; 源文件中字段的缺省值需用不同于分隔符的字符表示,字符型字段中不能含有分隔符,否则会

21、带来异常结果。 输入格式仅控制PDV中数据向变量的转换,而源文件中字段的读取长度由分隔符决定。,许振宇 山东大学数学学院 2006,4)例子例5:假设有如下源文件employee.dat保存了职工信息,包括姓、名、所在部门、电话号码。 Alvarz Joe Development 4327 Brown Ann Publications 2587 Miller Rick Sales 3456 Krueger John Training 2145读入此源文件并创建数据集的数据步如下:data employee; infile d:dstemployee.dat; input LastName $

22、FirstName $ Department $ TelNum $;run;,许振宇 山东大学数学学院 2006,也可写为: data employee; infile d:dstemployee.dat; input LastName :$12. FirstName :$12. Department :$12. TelNum :$4.;run;通过VIEWTABLE窗口可看到结果如下:,许振宇 山东大学数学学院 2006,例6:假如源文件employee.csv是以下形式,其中保存了职工信息,包括名字、所在部门、电话号码。 Alvarz,Joe,Development,4327 Brown,

23、Ann,Publications,2587 Miller,Rick,Sales, Krueger,John,Training,2145 源文件中逗号为分隔符,编写如下数据步:data employee; infile d:dstemployee.csv dlm=,; input LastName $ FirstName $ Department $ TelNum $;run;,许振宇 山东大学数学学院 2006,则会产生如下结果:,许振宇 山东大学数学学院 2006,如果在数据步中添加选项DSD,修改为如下形式: data employee; infile d:dstemployee.csv

24、dsd; input Name :$16. Department :$12. TelNum :$4.;run;则可得到我们希望的结果:,许振宇 山东大学数学学院 2006,4.4 命名模式1)适合的源文件 每个数据行都要为各个字段对应的数据指定变量名 2)一般形式: INPUT 变量名=输入格式 ;,许振宇 山东大学数学学院 2006,例7:假设有如下形式的源文件class.dat:Name=Alex Bruce Sex=M Height=174Name=Cathy Lee Sex=F Height=160我们调用以下数据步:data temp; infile d:dstclass.dat;

25、input Name=$10. Sex=$1. Height=3.; run; 可得到如下数据集:,许振宇 山东大学数学学院 2006,5. INFILE语句中的选项 5.1 一般形式: INFILE 文件名 firstobs=起始行号 obs=终止行号; 5.2 说明firstobs=起始行号指定了从源文件的那一行开始读取数据 ;obs=终止行号指定了读到源文件的那一行结束。作用:主要用于避开源文件开始部分的说明性文字,或者在调试程序时控制读取的行数。 此选项对所有输入模式都适用。,许振宇 山东大学数学学院 2006,6. 输出格式的设置6.1 一般形式:通过语句FORMAT实现,其一般形式

26、为: FORMAT 变量名 输出格式 ; 6.2 说明:此语句包含在数据步中,变量名是出现于INPUT语句中的变量;输出格式的形式为: $输出格式名w.d例如:format dest $3.,许振宇 山东大学数学学院 2006,4 查看数据集,1. 查看数据集的描述部分 可通过调用过程步CONTENTS实现,1.1 最简形式: PROC CONTENTS DATA = 数据集名; RUN; 1.2 功能:在输出(Output)窗口中显示数据集的描述部分和各变量属性。1.3 例1:编辑并提交如下程序:proc contents data = sashelp.class;run;,许振宇 山东大学

27、数学学院 2006,在Output窗口中显示如下结果:,许振宇 山东大学数学学院 2006,2. 浏览数据集的数据部分可通过调用过程PRINT实现,2.1 最简调用形式是: PROC PRINT DATA = 数据集名; RUN; 2.2 功能:在输出(Output)窗口中显示数据集的数据部分。2.3 例2:编辑并提交如下程序:proc print data = sashelp.class;run;,许振宇 山东大学数学学院 2006,在Output窗口中显示如下结果:,许振宇 山东大学数学学院 2006,5 数据加工,1数据加工简介 1.1 一般形式 1)读入外部源文件时进行数据加工 DAT

28、A 数据集名 数据加工选项; INFILE 源文件名 数据加工选项; INPUT 变量名 变量设置; 数据加工语句; RUN;,许振宇 山东大学数学学院 2006,2)面向SAS数据集的数据加工 DATA 目的数据集名 数据加工选项; SET 源数据集名 数据加工选项; 数据加工语句; RUN; 说明:在数据步中的SET语句用于读入已存在的数据集。在此格式的数据步中:系统将SET语句指定的源数据集中的所有变量自动读入PDV(默认方式下); 所有观测依次读入PDV,然后自动写入DATA语句指定的目的数据集中; 源数据集和目的数据集可以是同一个数据集;可用于修改一个已经存在的数据集。,许振宇 山东

29、大学数学学院 2006,1.2 数据加工的位置 在SET或INFILE语句中设置,在将源文件或源数据集中的数据读取到内存中时,进行数据加工;通过给出数据加工语句,系统对PDV中的数据进行数据加工; 在DATA语句中设置,在系统将PDV中的数据写入目的数据集时进行数据加工。,许振宇 山东大学数学学院 2006,图3 读取源数据集生成目的数据集示意图,许振宇 山东大学数学学院 2006,2.有关观测的数据加工2.1 选择观测 1)IF语句 一般形式: IF 条件表达式; IF 条件表达式 THEN DELETE; 功能: 是用于指定保留于目的数据集中的观测应满足的条件,只有使条件表达式成立的观测才

30、被写入目的数据集;是用于指定不保留于目的数据集中的观测应满足的条件,只有使条件表达式不成立的观测才被写入目的数据集。,许振宇 山东大学数学学院 2006,说明:条件表达式的基本组成元素是运算符和运算对象。(1)运算对象:可以是变量、常数、表达式或函数。(2)运算符包括以下3类: 算术运算符:+、-、*、/、*(乘方)等; 比较运算符:=(EQ)、=(NE)、(GT)、=(GE)、=(LE)、IN(包含在值的集合中) 等; 逻辑运算符: AND(&)、OR(|)、NOT()。 (3)表达式的结果:数值型 表达式使用了比较运算符时,如果关系成立,则结果为1,否则结果为0; 如果表达式的结果不为0也

31、不是空值,则称表达式是成立的,否则称表达式是不成立的。,许振宇 山东大学数学学院 2006,(4)条件表达式的一般形式:基本条件表达式 :=表达式 比较运算符 表达式条件表达式 := 基本条件表达式 | 条件表达式 逻辑运算符 条件表达式 | 逻辑运算符 条件表达式 例:Sex=M AND Age IN (12,13,14),许振宇 山东大学数学学院 2006,许振宇 山东大学数学学院 2006,许振宇 山东大学数学学院 2006,例1:SAS系统提供的数据集sashelp.class中,变量Sex(性别)仅有两个取值:M (男性)和F (女性)。我们如果想得到一个只包含男生数据的新数据集wo

32、rk.class,可通过以下数据步实现:data class; set sashelp.class ; if sex=M;run;IF语句也可改为: if sex=F then delete;,许振宇 山东大学数学学院 2006,例2:选择数据集sashelp.class中的观测生成新数据集work.class,要求其中的观测满足条件:年龄大于14岁的男生。data class; set sashelp.class ; if sex=M and age14;run;,许振宇 山东大学数学学院 2006,2)WHERE语句 一般形式: WHERE 条件表达式; 功能:对读入PDV中的观测进行选择

33、,只有使表达式成立的观测才被保留。说明:WHERE操作符:只能在WHERE语句中使用的比较运算符。变量 BETWEEN 值1 AND 值2 变量的值包含在值1和值2构成的的范围内。变量 CONTAINS 字符串 变量中包含字符串例如例2用WHERE语句代替IF语句可写为:where sex=M and age14;,许振宇 山东大学数学学院 2006,3)WHERE选项 一般形式: (WHERE = (条件表达式) 功能:对观测进行选择,只有使表达式成立的观测才被写入目的数据集。 说明:1)可用于SET语句或DATA语句中。2)一个数据步中可以在SET或DATA语句中同时出现WHERE选项,同

34、时还可以有WHERE语句。 例2可用以下数据步实现: data class (where=(sex=M); set sashelp.class (where=(age14) ;run;,许振宇 山东大学数学学院 2006,2.2 源数据集选项 在源数据集或源数据文件读入PDV时,可通过设置此选项控制读入的起始行和终止行。 一般格式如下: ( FIRSTOBS = 起始行号 OBS = 终止行号 ) 功能:指定读取源数据集或源文件的起始行和终止行。 说明: 1)应用于SET或INFILE语句中; 2)系统在缺省情况下读取所有观测或数据行。例3:读取sashelp.class中的第4条到第10条观

35、测,生成新的数据集work.class。 data class; set sashelp.class (firstobs=4 obs=10);run;,许振宇 山东大学数学学院 2006,3.有关变量的数据加工3.1 选择变量方法:数据步中设置KEEP=和DROP=选项,或加入KEEP和DROP语句, 1)KEEP和DROP语句 一般形式: KEEP 变量1 变量2 ; DROP 变量1 变量2 ; 功能:KEEP语句:列出的是在新数据集中要保留的变量,DROP语句:列出的是在新数据集中要删除的变量。,许振宇 山东大学数学学院 2006,例4:如下图所示,在SAS系统中有数据集sashelp.

36、class,其中包含了5个变量:Name、Sex、Age、Height、Weight。如果我们希望构造一个新数据集work.class,其中仅包含变量Name、Age、Height。可通过以下数据步实现:,许振宇 山东大学数学学院 2006,data class; set sashelp.class; drop sex weight;run; 也可将上例中的DROP语句替换为如下KEEP语句: keep name age height;则在VIEWTABLE窗口中打开work.class可看到如下结果:,许振宇 山东大学数学学院 2006,2)数据集选项KEEP和DROP 一般形式: (KEE

37、P = 变量1 变量2 ) (DROP = 变量1 变量2 ) 功能:KEEP选项:列出的是在新数据集中要保留的变量,DROP选项:列出的是在新数据集中要删除的变量。说明:(1)可用于SET语句或DATA语句中。(2)一个数据步中可以在SET或DATA语句中同时出现KEEP或DROP选项,同时还可以有KEEP或DROP语句。但此时需要注意避免变量的冲突。,许振宇 山东大学数学学院 2006,对于例4也可以用以下数据步实现: data class(keep=name age height); set sashelp.class; run; DATA语句也可写为: data class(drop=

38、sex weight);或:data class; set sashelp.class(keep=name age height); run;SET语句也可写为: set sashelp.class(drop=sex weight);,许振宇 山东大学数学学院 2006,3.2 变量的创建与赋值 在数据加工过程中不仅可以舍弃不需要的变量,还可以创建新的变量并对其进行赋值。 1) 赋值语句 一般形式: 变量名 = 表达式; 功能:如果等号左端的变量已经存在于数据集中,则修改变量的值;如果数据集中不存在等号左端的变量,则创建新变量并赋值。 说明:表达式可以是任何有效的表示形式,其中可以包括变量、常

39、数、运算符、函数、子表达式。,许振宇 山东大学数学学院 2006,例5:数据集sashelp.class中变量Height和Weight是以英制单位表示的,我们想新建一个数据集work.class,其中变量Height和Weight以公制单位表示,并且增加一个新变量Ratio,用于保存每个人的体重和身高的比例(Weight/Height)。data class; set sashelp.class; Height=Height*0.0254; Weight=Weight*0.454; Ratio=Weight/Height;run;,许振宇 山东大学数学学院 2006,在VIEWTABLE窗口

40、中可观察到新数据集work.class的内容如下:,许振宇 山东大学数学学院 2006,例6:在读取外部文件创建数据集时,也可以创建新变量。假设一个保存航班信息的文本文件dfw.dat,其中每个航班信息对应一行,其中有如下字段:,许振宇 山东大学数学学院 2006,我们通过如下数据步新建数据集work.flight,并添加一个新变量Total用于保存每个航班上的所有人数。data flight; infile d:dstflight.dat; input FlightID $ 1-3 Date date7. Dest $ 11-13 Boarded 14-16 Trans 17-19 Airc

41、rew 20-22; Total= Boarded + Trans + Aircrew;run;,许振宇 山东大学数学学院 2006,2) 变量属性的设置(1)设置变量的类型和长度 一般形式: LENGTH 变量名1 $ 长度 变量名2 $ 长度 ; 功能:预先为指定变量设置类型和长度。 说明:该语句必须出现在其他语句引用这一变量之前(包括赋值语句)。 变量的类型通过可选项$设置, 若给出,表示变量是字符型的; 若不给出,表示变量是数值型的。,许振宇 山东大学数学学院 2006,(2)设置变量的输出格式 一般形式: FORMAT 变量名1 输出格式 变量名2 输出格式 ; 功能:给指定的变量设

42、置输出格式。 (3)设置变量的输入格式 一般形式: INFORMAT 变量名1 输入格式 变量名2 输入格式 ; 功能:给指定的变量设置输入格式。,许振宇 山东大学数学学院 2006,(4)设置变量的标签 一般形式: LABEL 变量名1 = 标签 变量名2 = 标签 ; 功能:给指定的变量设置标签(即注释)。 说明:标签以用一对引号括起来的字符串的形式给出。,许振宇 山东大学数学学院 2006,1. 实现:过程步SORT 2. 一般形式:3.功能:根据指定排序变量对数据集中的观测进行排序。,PROC SORT DATA=数据集名 OUT=输出数据集名; BY DESCENDING 变量名1

43、DESCENDING 变量名2 ;RUN;,7 数据集的排序,许振宇 山东大学数学学院 2006,4.说明: 1)数据集中的观测的缺省顺序:观测输入数据集的顺序。2)DATA=数据集名:指定待排序的数据集。 3)OUT=输出数据集名:指定存放排序结果的数据集,若不给出此选项,系统缺省将排序结果存放在原数据集名下。4)BY语句指定排序变量,可在此设置多个排序变量,按其出现的前后顺序称为第一排序变量、第二排序变量、。系统在进行排序时,首先将数据集中的观测按照第一排序变量的值进行排序,对于那些在第一排序变量的值相等的观测,按照第二排序变量的值进行排序,以此类推,直到处理完BY语句中的所有排序变量。5

44、)系统默认按照排序变量的值进行升序排序(即由小到大排序),如果在变量名前给出可选项DESCENDING,则按照排序变量的值进行降序排序(即由大到小排序)。,许振宇 山东大学数学学院 2006,例1:对数据集sashelp.class中的观测进行排序,首先按照变量Age的值降序排列,Age相同的观测按照Height升序排列。排序结果保存在work.sortedclass中。 proc sort data=sashelp.class out=sortedclass; by descending age height;run;,许振宇 山东大学数学学院 2006,7 数据集的合并与拼接,1. 拼接数

45、据集 拼接两个数据集的操作使得结果数据集中可以包含两个数据集的所有观测。,许振宇 山东大学数学学院 2006,一般格式: DATA 新数据集名; SET 源数据集名1 源数据集名2 ; RUN; 功能:通过数据步中SET语句完成数据集的拼接,使结果数据集中包含SET语句中列出的数据集的所有观测。,许振宇 山东大学数学学院 2006,说明:1)如果SET语句中两个源数据集包含不同的变量,则结果数据集中包含所有出现过的变量。对于没有此变量的数据集中的观测,系统会自动加入缺省值。 2)可以在DATA或SET语句中通过选项对变量进行重命名,选项格式如下: ( RENAME = ( 原变量名 = 新变量

46、名 ) ) 此选项紧跟在某一源数据集之后;如果参加拼接的两数据集中存在变量名字不同,但其它属性相同,可在拼接过程中对其中一个数据其中的变量改名。,许振宇 山东大学数学学院 2006,例1:新建两数据集A和B并拼接为一个新数据集Combine。 data A; input Num Var$ A$ ; cards;1 A1 X1 2 A2 X2 5 A3 X3;run;data B; input Num Var$ B$ ; cards;3 B1 Y1 4 B2 Y2 6 B3 Y3;run;data Combine; set a b;run;,许振宇 山东大学数学学院 2006,例2:拼接如下两个

47、数据集FA1和FA2,数据步和结果如下: libname dst d:dst; data newfa; set dst.fa1 dst.fa2; run;,许振宇 山东大学数学学院 2006,例3:有以下两个数据集dst.fa1和dst.fa3,拼接两数据集(同时对dst.fa3 中的变量jcode重命名)。 data newfa; set dst.fa1 dst.fa3(rename=(jcode=jobcode);run;,许振宇 山东大学数学学院 2006,2.合并数据集将两个数据集进行合并,则结果数据集中可以包含两个数据集中的所有变量。前提:两数据集有相同的变量即变量的名字、类型和长度

48、完全相同,我们将此类变量称为合并变量。结果数据集中包含两个数据集中的所有变量(但合并变量只出现一个,系统自动删去重复的一个)。,许振宇 山东大学数学学院 2006,合并过程如下:系统从头开始依次扫描数据集A中的每一条观测,对于数据集A中正在扫描的当前观测,系统从头开始会依次扫描数据集B中的每一条观测,并且判断分别来自于两数据集的当前观测的合并变量的值是否相等。如果相等,则将两条观测合并成一条观测,保存到结果数据集C中;如果不相等,则扫描数据集B中的下一条观测。当扫描完数据集B中的最后一条观测,则扫描数据集A中的下一条观测,而对于数据集B从头开始下一趟扫描。反复执行以上操作,直到数据集A中的所有

49、观测都处理完毕。,许振宇 山东大学数学学院 2006,一般形式:DATA 新数据集名; MERGE 源数据集名1 源数据集名2 ; BY 合并变量名; RUN; 说明:1)MERGE语句可以合并任意多个数据集。2)合并前必须对输入数据集按照合并变量进行排序。,许振宇 山东大学数学学院 2006,3)对于一个数据集中的一条观测,如果另一个数据集中没有排序变量相等的观测,则系统在结果数据集中也构造一条新观测,并且在属于另一个数据集的变量中设置缺省值。 4)对于一个数据集中的一条观测,在另一个数据集中可能有多条观测的排序变量与之相等,那么有几条排序变量相等的观测就在结果数据集中生成几条新观测。 5)

50、可以在DATA或MERGE语句中对变量进行重命名,选项格式如下:( RENAME = ( 原变量名 = 新变量名 ) ),许振宇 山东大学数学学院 2006,例15:新建两数据集person和salary并合并为一个新数据集persal。,data person; input ID LName$ FName$; cards;2538 Dean Sharon2559 Carter Dorothy2658 Arthur Barbary3992 Cooper Anthony;run;proc sort data=person; by ID;run;,data salary; input ID Sal

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备2025010119号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000987号