第三章建立数据集 SAS系统中建立数据集的途径主要有三种: ●使用传统的SAS数据步程序 ●用SAS/FSP软件中的FSEDIT和FSVIEW过程 Q使用SAS/ACCESS软件访问其他的数据库
第三章 建立数据集 SAS系统中建立数据集的途径主要有三种: ●使用传统的SAS数据步程序 ●用SAS/FSP软件中的FSEDIT和FSVIEW过程 ●使用SAS/ACCESS软件访问其他的数据库
第三章建立数据集 3.1利用数据步程序建立SAS数据 3.1.1利用数据步创建SAS数据集的三种方式 1.从程序中直接读入数据 ●DATA语句,启动一个数据步,命名数据集 。INPUT语句,描述如何读入每一条记录观测 ●CARDS语句,提供要输入的数据 2.将外部原始数据文件转换成SAS数据集 。DATA语句,启动一个数据步,命名数据集 。INFILE语句,指定存储有要读入数据的文件 。INPUT语句,描述如何读入每一条记录 3.利用已有的数据集创建新的SAS数据集 。DATA语句,启动一个数据步,命名数据集 SET/MERGE/UPDATE语句,连接/合并/修改已有 的数据集
第三章 建立数据集 2 3.1 利用数据步程序建立SAS数据 3.1.1 利用数据步创建SAS数据集的三种方式 1. 从程序中直接读入数据 ● DATA语句,启动一个数据步,命名数据集 ● INPUT语句,描述如何读入每一条记录(观测) ● CARDS语句,提供要输入的数据 2. 将外部原始数据文件转换成SAS数据集 ● DATA语句,启动一个数据步,命名数据集 ● INFILE语句,指定存储有要读入数据的文件 ● INPUT语句,描述如何读入每一条记录 3. 利用已有的数据集创建新的SAS数据集 ● DATA语句,启动一个数据步,命名数据集 ● SET/MERGE/UPDATE语句,连接/合并/修改已有 的数据集
第三章建立数据集 3.1.2常用数据步语句简介 1.DATA语句 语句格式: DATA ; DATA语句的作用是表明数据步的开始,并 给出所建数据集的名称。 所有的数据集名都是由半角符号“”分隔的 两部分组成。第1部分称作1级名libname或库 逻辑名),它标识数据集所存贮的位置;第2部 分(2级名)标识特定的数据集。 如:DATA A; 则建立名为WORD.A的数据集(临时)
第三章 建立数据集 3 3.1.2 常用数据步语句简介 1. DATA语句 语句格式: DATA ; DATA语句的作用是表明数据步的开始,并 给出所建数据集的名称。 所有的数据集名都是由半角符号“.”分隔的 两部分组成。第1部分称作1级名(libname或库 逻辑名),它标识数据集所存贮的位置;第2部 分(2级名)标识特定的数据集。 如:DATA A; 则建立名为 WORD.A 的数据集(临时)
第三章建立数据集 临时数据集:不指定1级名,使用WORK。 空数据集: 使用NULL数据集名,不建立数据集。 DATA NULL A=SN(3.1415/4); B=INT(A*100); PUT A B; RUN; 必自动命名: 不给出数据集名,则SAS自动以DATA1, DATA2等依次命名。 DATA; 8时 当前数据集: 最后建立的数据集。 4
第三章 建立数据集 4 ❖ 临时数据集:不指定1级名,使用WORK。 ❖ 空数据集: 使用_NULL_数据集名,不建立数据集。 DATA _NULL_; A=SIN(3.1415/4); B=INT(A*100); PUT A B; RUN; ❖ 自动命名: 不给出数据集名,则SAS自动以DATA1, DATA2等依次命名 。 DATA ; ❖ 当前数据集: 最后建立的数据集
第三章建立数据集 DATA D1: PROC PRINT; INPUT A B; RUN: CARDS: PROC PRINT DATA=D1: 35 79 RUN; RUN; DATA D2; INPUT C D; CARDS: 1315 17 19 21 23 RUN: 5
第三章 建立数据集 5 DATA D1; INPUT A B; CARDS; 3 5 7 9 ; RUN; DATA D2; INPUT C D; CARDS; 13 15 17 19 21 23 ; RUN; PROC PRINT; RUN; PROC PRINT DATA=D1; RUN;
第三章建立数据集 2.INPUT语句 用来描述在输入记录中的数据,并把输入值赋 给相应的变量。 语法:NPUT; Input语句中变量使用三种输入数据方式: 必列表输入 列输入 *格式化输入 6
第三章 建立数据集 6 2. INPUT语句 用来描述在输入记录中的数据,并把输入值赋 给相应的变量。 语法:INPUT ; Input 语句中变量使用三种输入数据方式: ❖ 列表输入 ❖ 列输入 ❖ 格式化输入
第三章建立数据集 (1)列表输入 在Input语句中,变量只简单列出变量名 在数据中,数据由空格分隔。 字符数据默认长度为8,若读入长数据,需用lengthi语句。 例:Input name age sex S1S2S3; 优点:简单易用。 缺点: 1)变量顺序必须与数据顺序一致。 2)不能有选择的读入数据,只能按顺序输入 如:有ABCDE,如只想输入ABD,不能跳过C。 3)不能输入带有空格的数据。 注意:缺项值用“”表示
第三章 建立数据集 7 (1)列表输入 在Input 语句中,变量只简单列出变量名 在数据中,数据由空格分隔。 字符数据默认长度为8,若读入长数据,需用length语句。 例:Input name $ age sex $ S1 S2 S3; 优点:简单易用。 缺点: 1)变量顺序必须与数据顺序一致。 2)不能有选择的读入数据,只能按顺序输入。 如:有A B C D E, 如只想输入A B D, 不能跳过C。 3)不能输入带有空格的数据。 注意:缺项值用“.”表示
第三章建立数据集 (2)列输入 在Input语句中,变量名后指出变量值所处的列号。 在数据中,同一变量的数据应位于相同的列上。 例: Input name 1-8 count 10-12; cards; zhangsan 101 Lisi 102 优点: 1)输入值可以以任何顺序读入: INPUT FIR 73-80 SEC 10-12; 2)字符型数据中可包含空格 3) 字符型数据可以最多到200个字符长 4)可读取全部或部分数值:INPUT ID10-15 GROUP13; 缺点: 数据必须严格按照列位置输入。 注意:所读取列中只有空格或“”时, 被作为缺项值。 8
第三章 建立数据集 8 (2)列输入 在Input 语句中,变量名后指出变量值所处的列号。 在数据中,同一变量的数据应位于相同的列上。 例: Input name $ 1-8 count 10-12; cards; zhangsan 101 Lisi 102 优点: 1)输入值可以以任何顺序读入:INPUT FIR 73-80 SEC 10-12; 2)字符型数据中可包含空格 3)字符型数据可以最多到200个字符长 4)可读取全部或部分数值:INPUT ID 10-15 GROUP 13; 缺点:数据必须严格按照列位置输入。 注意:所读取列中只有空格或“.”时,被作为缺项值
第三章建立数据集 (3)格式化输入 在Input语句中,变量名后给出一个输入格式。输入格式用来 说明变量的数据类型和字段的宽度。 在数据中,数据一般要求列对齐。 例:INPUT NAME S10.H4.2; 适合输入日期型数据: DATA DAYS; INPUT NUM S BIRTHDAY MMDDYY8.TESTDAY DATE10.WT; CARDS; 10017-21-963MAR9710 100210/30/9614/小AN/974 100306199613JUN19979 100403079729AUG973 RUN;
第三章 建立数据集 9 (3)格式化输入 在Input 语句中,变量名后给出一个输入格式。 输入格式用来 说明变量的数据类型和字段的宽度。 在数据中,数据一般要求列对齐。 例:INPUT NAME $10. H 4.2; 适合输入日期型数据: DATA DAYS; INPUT NUM $ BIRTHDAY MMDDYY8. TESTDAY DATE10. WT; CARDS; 1001 7-21-96 3MAR97 10 1002 10/30/96 14/JAN/97 4 1003 06 19 96 13JUN1997 9 1004 03 07 97 29 AUG 97 3 ; RUN;
第三章建立数据集 注意: 。格式化读入时,读数据指针按给出的格式长度移动。 MMDDYY8. 格式读入日期值时,日期值最长占8列。如格式给 出的长度不足,则会出现数据截尾。DATD10.格式是按 ddmmmyy的格式读入数据的,最长可读入10列。 ●日期在SAS系统中的表示是用1960年1月1日至读入那一天 之间的天数表示的。如读入的日期在1960年以前,则用负数表 示。这种表示便于进行计算。 ●输出时一般要用相应的格式,详见8.③)中FORMAT语句。 ●简化输入:如有X1,X2.X10十个字符型量的值紧挨在 一起,每个量长度为3,则: INPUT (X1-X10)($3.);
第三章 建立数据集 10 注意: ●格式化读入时,读数据指针按给出的格式长度移动。 MMDDYY8. 格式读入日期值时,日期值最长占8列。如格式给 出 的 长度 不足 ,则 会出 现数 据截 尾。 DATE10. 格 式是 按 ddmmmyy的格式读入数据的,最长可读入10列。 ●日期在SAS系统中的表示是用1960年1月1日至读入那一天 之间的天数表示的。 如读入的日期在1960年以前, 则用负数表 示。这种表示便于进行计算。 ●输出时一般要用相应的格式,详见8.(3)中FORMAT语句。 ● 简化输入:如有X1,X2......X10十个字符型量的值紧挨在 一起,每个量长度为3, 则 : INPUT (X1-X10) ($3.);