290 likes | 428 Views
第三章 建立数据集 Make the Data Set. 主讲人:李桥. 主要内容. 利用数据步程序建立 SAS 数据集 从程序中直接提供数据 从文本数据文件中读取数据 从已有数据集中复制数据 使用交互式方式建立 SAS 数据集 将其他数据文件转换成 SAS 数据集. 利用数据步程序建立 SAS 数据集. 利用数据步建立数据集的三种方式 从程序中直接提供数据 Data 语句;启动数据步 Input 语句;描述和输入变量 Cards 语句;标志数据开始 从文本数据文件中读取数据 Data 语句;启动数据步 Infile 语句;指明存放数据的文本文件
E N D
第三章 建立数据集Make the Data Set 主讲人:李桥
主要内容 • 利用数据步程序建立SAS数据集 • 从程序中直接提供数据 • 从文本数据文件中读取数据 • 从已有数据集中复制数据 • 使用交互式方式建立SAS数据集 • 将其他数据文件转换成SAS数据集
利用数据步程序建立SAS数据集 • 利用数据步建立数据集的三种方式 • 从程序中直接提供数据 • Data语句;启动数据步 • Input语句;描述和输入变量 • Cards语句;标志数据开始 • 从文本数据文件中读取数据 • Data 语句;启动数据步 • Infile语句;指明存放数据的文本文件 • Input语句;描述和输入变量 • 从已有数据集中复制数据 • Data 语句;启动数据步 • Set/Merge/Update语句;连接/合并/修改已有数据集
从程序中直接提供数据,建立SAS数据集 • DATA语句: • 作用:表明数据步的开始,并给出所建数据集的名称。 • 语句格式: DATA < Dataset Name Table > ; • 注:语法符号含义: <…> 表示必选项,用实际内容替换, […] 表示可选项,用实际内容替换, …|…表示二选一, 无括号,表示关键词,直接使用。 • 说明: 数据集名必须以英文字母开始。 数据集名是由半角符号“.”分隔的两部分组成。第1部分称作1级名(libname或库逻辑名),它标识数据集所存贮的位置;第2部分称作2级名,标识特定的数据集。
几个概念: • 永久数据集/临时数据集: SAS的数据集文件存储在磁盘上,用库逻辑名指定存储位置。如果不明确指定存储位置,SAS默认存储在临时工作区(Work),SAS退出时自动删除,这些数据集称为临时数据集。如:Data a; 如果指定了其他存储位置,如SAS提供的Sasuser库,则退出时不会删除,这些数据集称为永久数据集。如: Data sasuser.a; 也可通过Libname语句指定库逻辑名,自行确定存储位置。 • 注意:一旦建立了永久数据集,在每次使用该数据集名时必须同时指定库逻辑名。
当前数据集:SAS最后建立的数据集。 过程步中如不加指定,默认对当前数据集进行操作。 例: DATA D1; INPUT A B; CARDS; 3 5 7 9 ; DATA D2; INPUT C D; CARDS; 13 15 17 19 ; PROC PRINT; PROC PRINT DATA=D1; RUN;
Input语句: • 作用:定义变量,并把输入值赋给相应的变量。 • 格式: Input < Variable Table >; • 三种输入数据格式: • 列表输入 • 列输入 • 格式化输入
列表输入:在Input语句中仅列出变量名;数据仅需用空格分割,不必列对齐。列表输入:在Input语句中仅列出变量名;数据仅需用空格分割,不必列对齐。 • 例: Input name$ sex$ age h w; • 优点:简单易用。 • 缺点: 1)只能按顺序输入变量,不能有选择的输入数据 2)不能输入带空格的数据 3)字符型数据长度受缺省8个字符的限制 • 注意:缺项值用“.”表示。
列输入:在Input语句中,变量名后用数字指明变量的取值在数据行中所处的列位置;数据要求严格列对齐,并出现在所要求的列上。列输入:在Input语句中,变量名后用数字指明变量的取值在数据行中所处的列位置;数据要求严格列对齐,并出现在所要求的列上。 • 例: Input name $1-10 num 11-18 class 15 grade 11-14; cards; zhang san 20051001 Lisi 20052002 ; • 优点: (1)输入值可以以任何顺序读入,只需标明列号 (2)字符型数据中可包含空格 (3)字符型数据可以最多到200个字符长 (4)可读取全部或部分数值 • 缺点:数据必须严格按照列位置输入。 • 注意:所读取列中只有空格或“.”时,被作为缺项值。
格式化输入:在Input 语句中,变量名后给出一个输入格式,输入格式用来说明变量的数据类型和字段的宽度;在数据中,数据一般要求列对齐,不必用空格隔开。 • 例: 字符格式:Input name $ 10. ; 数值格式:Input h 4.2 ; 日期格式:mmddyy10. date12. 例: Data a; Input d mmddyy10. d2 date12. ; cards; 10/19/2005 19/Oct/2005 ;
输出格式: 日期数据在输出时,可用Format语句指定输出格式,以便显示成可以理解的日期格式。 • 注意:输出格式不写数据长度。 • 例: Format d date. ; Format语句可用于数据步中,也可用于过程步中。
行保持符(续行符):@@ • 使SAS执行完Input语句后不换行,保持在同一数据行上,继续读数据。 • 例: Data a; input x y @@; cards; 3.16 2.9 5.8 3 4.9 4.17 ; proc print; run;
从文本数据文件中读取数据,建立数据集 • Infile语句: • 作用:指明存放数据的文本文件,Input语句将从这个文件中读数据,程序中不再出现Cards语句和原始数据。该文件中只保存一行行的原始数据(不包括Cards;语句和数据最后的分号)。 • 语句格式: Infile “< Data file path and filename >”; • 说明: Infile语句要放在Input语句前,数据文件路径要与文件实际存储路径一致。
例: • 数据文件准备:先在编辑环境下写好数据如下: 101 zhang M 1.80 80 102 wang F 1.65 50 然后保存在相应路径下,如:C:\mydata.sas • 编程:清除编辑窗口,输入以下程序: Data a; Infile “c:\mydata.sas”; Input num name$ sex$ h w; Proc print; Run;
从已有数据集中复制数据,建立数据集 • Set语句: • 作用:复制或连接数据集。 • 语句格式: Set < Dataset Name Table >; • 说明:Set语句从一个已存在的数据集中依次读取每一个观测,可进行相应处理,然后依次写入新建的数据集。
例: DATA SCORE1; INPUT NUM S1-S3; CARDS; 1001 78 89 92 1002 87 92 97 1003 64 74 88 ; DATA TOT; SET SCORE1; TOTAL=SUM(OF S1-S3); PROC PRINT; RUN;
其他常用语句: • 赋值语句 • 求和语句 • 删除和保留变量语句 • Length语句 • Label语句 • Format语句 • 注释语句
赋值语句:< Variable > = < Expression >; • 求和语句:< Accumulator Variable> + < Variable >; • 说明;累加和变量先置0,然后对欲求和变量的每个观测的值依次累加到累加和变量上,最后得到该变量各个观测值的累加和。 • 例: DATA A; INPUT X Y @@; S+X; CARDS; 3 5 7 9 20 21 ; PROC PRINT; RUN;
删除和保留变量语句: • 作用:在建立数据集时,将不需要的变量删除,最终数据集中只出现要保留的变量。 • 语句格式: Drop < Variable Table >; 删除变量 Keep < Variable Table >; 保留变量 • 说明:虽然Drop语句指明的变量不写入建立的数据集中,但是这些变量可在该数据步的所有编程语句中使用 。在 Data步中,Drop语句位于任何地方所产生的效果都相同(必须位于Data语句之后与Cards语句之前)。 Drop和Keep作用相反,不能在数据步中同时使用。
例: DATA PARTS; INPUT NAME $ S1 S2; TOTAL=S1+S2; DROP S1 S2; CARDS; zhanglin 78 89 wangqiang 95 87 ; Proc print; Run;
例: DATA PARTS; INPUT NAME $ S1 S2; TOTAL=S1+S2; KEEP NAME TOTAL; CARDS; zhanglin 78 89 wangqiang 95 87 ; Proc print; Run;
Length语句:指明字符变量长度。 • 语句格式:Length < Variable Name $> < Value >; • 例: DATA A; LENGTH NAME $ 13; INPUT NAME SEX $ H W; CARDS; ZhangZhihui F 1.70 52 ZhaoChangtai M 1.73 55 ; • 注意: 由于NAME变量已在LENGTH语句中定义为字符型量,故INPUT语句中可以不再用$号作定义。
Label 语句 • 作用:当数据集输出(打印)时,用标号字符代替变量名,使对变量名称的描述更加详细。 • 语句格式: Label < Variable Name > = < Label >; • 注意:为使标号有效输出,需在Print过程语句中加Label选项。 • 例: Data a; Input num $ sex $ h w; Label h=身高 w=体重; Cards; 101 M 1.72 61 ; Proc print Label; Run;
Format语句: • 作用:指定变量的输出格式。 • 语句格式:Format < Variable > < Output Format >; • 常用日期变量输出格式: mmddyy. date. worddate. • 例: Data emplo; Input name $ T date9.; Format T worddate. ; Cards; Zhongli 15Jan2005 Liuwei 03Mar2005 ; Proc print; Run;
注释语句:对程序作出解释,或标记某语句不予执行。注释语句:对程序作出解释,或标记某语句不予执行。 • 格式: • 语句开头加一个星号,用分号结束 • 用 /* */ 括起需要注释的程序语句 • 例: * - Example - ; Data a; Label n=name h=height; /* name 和 height 分别是变量 n和h 的标号 */ Input num n$ h; Cards; 1001 zhangsan 1.75 1002 lisi 1.82 ; Proc print label; Run;
使用交互式方式建立SAS数据集 • 应用VIEWTABLE表编辑器创建数据集 • 操作方法: • 打开Viewtable :【工具】--【表编辑器】菜单 • 确定变量属性:右键单击变量名字段,选择弹出的“Column Attributes”菜单,打开变量属性窗口。确定变量的名称、类型、标号、长度、输入输出格式等属性。 • 输入观测数据。 • 保存数据集: 【文件】--【保存】/ 【另存为】菜单,选择逻辑库名,输入成员名(数据集名),保存数据集。
编辑修改数据集 • 打开已有数据集: • 在SAS左侧窗格选中“SAS资源管理器”窗格,选中“逻辑库”文件夹,双击打开。(如找不到“逻辑库”文件夹,用菜单命令【查看】--【向上一级】) • 双击打开所需查看的逻辑库:Sasuser或Work,找到所需的数据集,双击图标打开Viewtable编辑器。
编辑数据集: • 数据集的编辑只能对观测进行添加、删除、修改,不能增删修改变量。 • 利用编辑工具栏按钮 / 编辑菜单进行编辑操作。 • 编辑方法: • 进入编辑模式:按“编辑”按钮或选择【编辑】--【编辑模式】菜单 • 添加新行:选择【编辑】--【添加行】,输入数据后选择【编辑】--【提交新行】。或采用“添加行”和“确认新建行”工具按钮。 • 保存修改:【文件】--【保存】菜单。
将其他数据文件转换成SAS数据集 • SAS支持将其他数据文件如:Excel,Access,dBase,文本文件等转换成SAS数据集。 • 转换方法:通过菜单:【文件】 → 【导入数据】,按向导逐步操作。