《第二章SAS编程基础教学提纲》由会员分享,可在线阅读,更多相关《第二章SAS编程基础教学提纲(68页珍藏版)》请在金锄头文库上搜索。
1、第二章 SAS编程基础,内容,SAS程序结构 变量、常数、表达式和函数 数据的输入 数据的输出 输入和输出的格数据及的操作 变量的控制 观测数据的管理 条件语句与循环语句 过程步的介绍,一、SAS程序的结构,SAS的程序由若干个SAS语句(Statements)构成。 按结构和功能可以将SAS过程分为两个过程步。是数据步(DataSteps)用于数据集的产生、加工和整理。程序步(ProcSteps)用于数据的分析并在Output窗口输出结果。 一个SAS程序可以有一个数据步或一个程序步。也可以有一个数据步和多个程序步。也可以有多个数据步和程序步。,数据步以DATA 语句开头,其后可以包括多个S
2、AS语句。DATA语句是用来建立SAS的数据集。该语句后的其它语句均是用来输入数据和对数据进行修改和编辑等。数据步的一般形式为: data 数据集名; 数据步语句; ; run; Run代表SAS的程序结束。一个程序可以有几个“run”,也可以只用一个“run“。,DATA D1; INPUT A B; CARDS; 3 5 7 9 ; RUN; 建立了一个叫D1的数据集,有变量A和B,分别有两个个案。,DATA D2; INPUT C D; CARDS; 13 15 17 19 21 23 ; RUN;,【例】建立以下样本的SAS数据集,姓名:name 性别:xb 年龄:age 身高:hig
3、h 体重:weigt,【例】 频数数据的组织方式:居民储蓄问卷调查结果,将此分组数据构造SAS的数据文件。,data a; input x y f; cards; 249006 35180010 3720009 30170011 ; proc means; freq f; run;,2.过程步,过程步要求SAS从系统中调出一个SAS过程,这个过程对应某一种统计分析方法,并对指定的数据集执行该过程,过程步以proc开头,指出调用的过程名和要分析的数据集。其后利用一些语句来指定调用该程序的各个参数。Data=数据集名是可以选择的,如果缺省使用最近的数据集。,Proc 过程名 data=数据集名;
4、过程步语句; 过程步语句; ; Run;,【例】,proc print data=a; run; 简单打印的过程语句。 proc means data=a; run; 计算描述统计量的过程。,二、变量、常数、表达式和函数,1.变量 SAS的变量是用来表示统计数据的。在SAS中,每一列就是一个变量,列中的数据值就是变量值。 SAS变量的属性(Attributes),包括名称(name)、类型(type)、长度(length)、输入格式(informat)、输出格式(format)以及标签(label)。,SAS变量属性,2.常数 SAS常数用来表示固定的值,包括数字、字 符数和一些特特殊的符号。
5、 数值型常数:例如1,2,0.53,1.5E-5 字符串常数:例如SWUFE 日期时间型常数:在SAS中日期和时间均有特殊的储存方式。 date=10APR2012d;,data a; date=10APR2012d; input x date12.; cards; 10/APR/2012 ; proc print; FORMAT x WORDDATE.; FORMAT date WORDDATE.; run; SAS的日期是从1960年1月1日起的整天数。计算2013年国庆的日期值。您的生日的日期值。,data a; input x; cards; 10903 ; proc print; F
6、ORMAT x date8.; run;,3.表达式,表达式由运算符号和运算对象组成。执行后产生一个目标值。运算符号包括算术运算符号、比较运算符号、逻辑运算符号、函数和括号等。 【例】 假设我们有工人的年龄(age)和工龄(gl)两个变量,现在要计算工人的入厂年龄(rc)。,Data a; Input age gl; rc=age-gl; Cards; 56 32 36 12 ; Proc print; Run;,data a; Input age gl; rc=age-gl; old=sign(age55); cards; 56 32 36 12 57 26 32 6 ; proc prin
7、t; run;,运算的符号与含义,4.SAS的函数,SAS的功能非常强大和全面,这一点在函数上得到了极为充分的体现,SAS中共有25大类函数,功能涉及到文件管理、金融、数学计算、统计计算、字符串处理、货币转换等各个方面。因篇幅限制,这里无法将数百种函数一一解释,只列举出较为常用的函数。,第一类 算术函数,SAS函数是SAS系统提供的子程序。 格式为: 函数名(自变量1,自变量2,) 函数名(of 变量列) data a; input x y; sum=sum(x,y); cards; 1 2 3 4 5 6 ; run;,三、数据输入,1.数据源和数据步形式 在数据量不大时,一般可以在程序编辑
8、器窗口将数据行和SAS程序写到一起,完成数据的输入。一般形式为: data 数据集名; input 变量名列; cards; 数据行 ; run;,其中,input语句用来读入数据,它根据数据行形式的不同采用不同的语句格式,cards语句可以用datalines语句,该语句的含义是提示SAS系统下面紧跟的是数据行。 Input语句有三种输入数据格式: 列表输入 列输入 格式化输入,2.按列输入,对于严格排列好的标准数据,才采用按列输入。 input 变量名 起始列数; Input name $1-10 num 11-18; cards; zhang san 20051001 Lisi 2005
9、2002 ; Run;,3.列表输入,在Input语句中仅列出变量名;数据仅需用空格分割,不必列对齐。基本格式 Input 变量名 ; 【例】 Input name$ sex$ age h w; 其中表示一个数据行只能读入一个观测, 表示一个数据行可以读入多个数据,按顺序读完。,4.格式化输入,格式化输入:在Input 语句中,变量名后给出一个输入格式,输入格式用来说明变量的数据类型和字段的宽度;在数据中,数据一般要求列对齐,不必用空格隔开。 例:字符格式:Input name $ 10. ; 数值格式:Input h 4.2 ; 日期格式:mmddyy10. date12. 例: Data
10、a; Input d mmddyy10. d2 date12. ; cards; 10/19/05 19/Oct/2005 ;,Input h 4.2 ;的含义是输入的数据是占4个有效数字,小数点两位。 Input d mmddyy10. d2 date12. ;输入的数据是两种日期数据格式。即从1960年1月1日开始计算的整天数。,data a; Input d mmddyy10. d2 date12.; cards; 11/01/2013 11/jul/2013 ; run; proc print; run;,MMDDYY8. (01232013)格式读入日期值时,日期值最长占8列。如格式
11、给出的长度不足,则会出现数据截尾。DATE10. 格式是按ddmmmyy的格式读入数据的,最长可读入10列。 简化输入:如有X1,X2.X10十个字符型量的值紧挨在一起,每个量长度为3, 则 : INPUT (X1-X10) ($3.);,四、数据输出,1.输出数据到SAS窗口 直接使用PUT语句,可以将数据输出到 SAS系统的log窗口; SAS系统的OUTPUT窗口; 在put语句前利用file语句,标识名的选择为:log和print。若标识为log,表示输出在日志窗口,如果标识为print,则输出现实在输出窗口,此时put语句将结果打印到输出窗口。,data a; input x y z
12、; file print; put x y z; cards; 1 2 5 3 4 7 4 5 8 ; run;,data a; input x y z; file log; put x y z; cards; 1 2 5 3 4 7 4 5 8 ; run;,2.输出到外部文件,联合使用PUT和FILE语句,可以实现将数据输出到外部文件。其中,FILE语句用于定义要输出外部文件。其语句格式为: FILE 文件路径; 文件路径包括完整的路径和文件名。选项用来控制输出数据如何被写入到输出文件中。 put语句用来实现数据输出。,data a; input x y z; file “c:sasdat
13、a.out; put x y z; cards; 1 2 5 3 4 7 4 5 8 ; run; 在SAS的子目录里有一个文本文件,扩展名为out。是三行数据 。,将其读入: data a2; infile c:SASdata.out; input x y z; proc print data=a2; run;,3.输出数据到SAS永久数据集,libname study c:sasmydata; data study.a; input x y z; cards; 1 4 5 2 6 9 9 12 11 ; Run;,读入SAS内部永久数据集,libname studyc:sasmydata;
14、 proc print data=study.a; run;,五、数据集的操作,1.SET语句 SET语句是数据集操作中的一个基本语句,用于从一个或多个数据集中读取观测数据,生成一个新的数据集。SET语句的基本格式为: SET 数据集名 ; 在SET语句中,数据集可以有一个或多个。如果数据集名只有一个,则直接从该数据集继承数据。如果数据集有多个,则应该考虑采用何种方式将这些数据集串联起来。,在SET语句中,每个数据集名后面的选项用来规定在读入该数据集时对变量或观测进行相关的操作,如果没有数据集名后面的选项,则读入数据集中所有的变量和观测。,选项与说明,3.数据集的串联(纵向合并),(1)简单串
15、联 简单串联就是将所有要合并的数据集简单叠放在一起。 data 新数据集名; set 数据集名1(选择表达式 )数据集名2 (选择表达式 ). . .; run; 可以附加选项来规定在读入该数据集时对变量和观测进行选择和删除。并包含所有的变量。如果某个数据集的没有此变量,则认为是缺失值。,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;,data a; input
16、x y; cards; 1 2 7 8 9 12 ; data b; input x; cards; 34 12 56 78 ; data c; set a (drop= y) b; ; run; proc print data=c; run;,(2)排序串联 如果各个数据集串联后需要按某个变量进行排序,除了使用set语句,还要使用by语句。 data 新数据集名; set 数据集名1 数据集名2 . . .; by 变量名; run;,4.数据集的并联(横向合并),1.简单并接 数据集的并接是指将多个数据集横向合并起来,即新的数据集增加。 data a; merge 数据集名1 数据集名2 ; run; 如