《《SAS编程基础》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《SAS编程基础》PPT课件.ppt(68页珍藏版)》请在三一办公上搜索。
1、第二章 SAS编程基础,内容,SAS程序结构变量、常数、表达式和函数数据的输入数据的输出输入和输出的格数据及的操作变量的控制观测数据的管理条件语句与循环语句过程步的介绍,一、SAS程序的结构,SAS的程序由若干个SAS语句(Statements)构成。按结构和功能可以将SAS过程分为两个过程步。是数据步(DataSteps)用于数据集的产生、加工和整理。程序步(ProcSteps)用于数据的分析并在Output窗口输出结果。一个SAS程序可以有一个数据步或一个程序步。也可以有一个数据步和多个程序步。也可以有多个数据步和程序步。,1.SAS的语句基本规则,SAS的语句一般由SAS的关键词开始,以
2、英语的分号(;)结尾,语句中还包括SAS的变量、常数、运算符函数或一些特殊的字符(比如”$”)。基本规则:语句可以在一行的任何地方开始;一个语句可以分写为若干行;多个语句可以写在同一行;语句中各项之间以空格隔开;不区分大小写。在SAS语句中的注释语句为:/*注释内容*/或*注释内容。,数据步以DATA 语句开头,其后可以包括多个SAS语句。DATA语句是用来建立SAS的数据集。该语句后的其它语句均是用来输入数据和对数据进行修改和编辑等。数据步的一般形式为:data 数据集名;数据步语句;run;Run代表SAS的程序结束。一个程序可以有几个“run”,也可以只用一个“run“。,DATA D1
3、;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身高:high体重:weigt,【例】频数数据的组织方式:居民储蓄问卷调查结果,将此分组数据构造SAS的数据文件。,data a;input x y f;cards;24900635180010372000930170011;proc means;freq f;run;,2.过程步,过程步要求SAS从系统中调出一个SA
4、S过程,这个过程对应某一种统计分析方法,并对指定的数据集执行该过程,过程步以proc开头,指出调用的过程名和要分析的数据集。其后利用一些语句来指定调用该程序的各个参数。Data=数据集名是可以选择的,如果缺省使用最近的数据集。,Proc 过程名 data=数据集名;过程步语句;过程步语句;Run;,【例】,proc print data=a;run;简单打印的过程语句。proc means data=a;run;计算描述统计量的过程。,二、变量、常数、表达式和函数,1.变量 SAS的变量是用来表示统计数据的。在SAS中,每一列就是一个变量,列中的数据值就是变量值。SAS变量的属性(Attrib
5、utes),包括名称(name)、类型(type)、长度(length)、输入格式(informat)、输出格式(format)以及标签(label)。,SAS变量属性,2.常数 SAS常数用来表示固定的值,包括数字、字 符数和一些特特殊的符号。数值型常数:例如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
6、date WORDDATE.;run;SAS的日期是从1960年1月1日起的整天数。计算2013年国庆的日期值。您的生日的日期值。,data a;input x;cards;10903;proc print;FORMAT x date8.;run;,3.表达式,表达式由运算符号和运算对象组成。执行后产生一个目标值。运算符号包括算术运算符号、比较运算符号、逻辑运算符号、函数和括号等。【例】假设我们有工人的年龄(age)和工龄(gl)两个变量,现在要计算工人的入厂年龄(rc)。,Data a;Input age gl;rc=age-gl;Cards;56 32 36 12;Proc print;R
7、un;,data a;Input age gl;rc=age-gl;old=sign(age55);cards;56 32 36 12 57 26 32 6;proc print;run;,运算的符号与含义,4.SAS的函数,SAS的功能非常强大和全面,这一点在函数上得到了极为充分的体现,SAS中共有25大类函数,功能涉及到文件管理、金融、数学计算、统计计算、字符串处理、货币转换等各个方面。因篇幅限制,这里无法将数百种函数一一解释,只列举出较为常用的函数。,第一类 算术函数,SAS函数是SAS系统提供的子程序。格式为:函数名(自变量1,自变量2,)函数名(of 变量列)data a;input
8、 x y;sum=sum(x,y);cards;1 2 3 4 5 6;run;,三、数据输入,1.数据源和数据步形式 在数据量不大时,一般可以在程序编辑器窗口将数据行和SAS程序写到一起,完成数据的输入。一般形式为:data 数据集名;input 变量名列;cards;数据行;run;,其中,input语句用来读入数据,它根据数据行形式的不同采用不同的语句格式,cards语句可以用datalines语句,该语句的含义是提示SAS系统下面紧跟的是数据行。Input语句有三种输入数据格式:列表输入列输入格式化输入,2.按列输入,对于严格排列好的标准数据,才采用按列输入。input 变量名 起始列
9、数;Input name$1-10 num 11-18;cards;zhang san 20051001Lisi 20052002;Run;,3.列表输入,在Input语句中仅列出变量名;数据仅需用空格分割,不必列对齐。基本格式 Input 变量名;【例】Input name$sex$age h w;其中表示一个数据行只能读入一个观测,表示一个数据行可以读入多个数据,按顺序读完。,4.格式化输入,格式化输入:在Input 语句中,变量名后给出一个输入格式,输入格式用来说明变量的数据类型和字段的宽度;在数据中,数据一般要求列对齐,不必用空格隔开。例:字符格式:Input name$10.;数值格
10、式:Input h 4.2;日期格式:mmddyy10.date12.例:Data 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.(0123201
11、3)格式读入日期值时,日期值最长占8列。如格式给出的长度不足,则会出现数据截尾。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;
12、input x y z;file print;put x y z;cards;1 2 53 4 74 5 8;run;,data a;input x y z;file log;put x y z;cards;1 2 53 4 74 5 8;run;,2.输出到外部文件,联合使用PUT和FILE语句,可以实现将数据输出到外部文件。其中,FILE语句用于定义要输出外部文件。其语句格式为:FILE 文件路径;文件路径包括完整的路径和文件名。选项用来控制输出数据如何被写入到输出文件中。put语句用来实现数据输出。,data a;input x y z;file“c:sasdata.out;put x
13、y z;cards;1 2 53 4 74 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;proc print data=study.a;run;,五、数
14、据集的操作,1.SET语句 SET语句是数据集操作中的一个基本语句,用于从一个或多个数据集中读取观测数据,生成一个新的数据集。SET语句的基本格式为:SET 数据集名;在SET语句中,数据集可以有一个或多个。如果数据集名只有一个,则直接从该数据集继承数据。如果数据集有多个,则应该考虑采用何种方式将这些数据集串联起来。,在SET语句中,每个数据集名后面的选项用来规定在读入该数据集时对变量或观测进行相关的操作,如果没有数据集名后面的选项,则读入数据集中所有的变量和观测。,选项与说明,3.数据集的串联(纵向合并),(1)简单串联 简单串联就是将所有要合并的数据集简单叠放在一起。data 新数据集名;
15、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 x y;cards;1 27 89 12;data b;input x;cards;34125678;data c;
16、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;如果不匹配会有缺失值。,(2)匹配并联 匹配并接是将两个或两个以上的数据集按照某个变量进行并接。为了进行匹配并接各个数据集都至少有一个相同的变量。data a;merge 数据
17、集名1 数据集名2;by 变量名;run;,data a;input num$x;cards;01 1 02 203 7 04 805 9 06 12;data b;input num$y;cards;01 3402 1203 5604 78;data r;merge a b;by num;proc print data=r;run;,七、变量的控制,1.DROP 语句 格式:DROP 变量表;DROP语句指明某些变量不包括在建立的数据集中。但是这些变量可在该数据步的所有编程语句中使用。在 DATA步中,DROP语句位于任何地方所产生的效果都相同。,DATA PARTS;INPUT NAME$
18、S1 S2;TOTAL=S1+S2 DROP S1 S2;CARDS;zhanglin 78 89 wangqiang 95 87,2.KEEP 语句格式:KEEP 变量表;如:KEEP NAME AVG;KEEP语句说明在正被建立的数据集中包括哪些变量。在KEEP语句中不包括的变量仍适用于其它程序语句。KEEP语句可出现在DATA步的程序语句中的任何位置,它是非执行语句。KEEP语句的作用与DROP语句正相反。在同一DATA步中,不要同时使用KEEP语句和DROP语句。,3.LENGTH 语句 当一个字符型变量长度超过或不用缺省值时,可用该语句指出变量的长度。如:DATA A;LENGTH
19、NAME$13;INPUT NAME SEX$H W;CARDS;ZhangZhihui F 1.70 52 ZhaoChangtai M 1.73 55;由于NAME变量已在LENGTH语句中定义为字符型量,故INPUT语句中可不再用$号作定义。,4.LABEL 语句变量名不许超过8个字符长。使用LABEL语句给变量一个标记,标记长可达40个字符。它与变量值同时存于数据集中,它可以被许多SAS过程打印出来。,DATA D;INPUT NUM$SEX$H W;LABEL H=HEIGHT W=WEIGHT;CARDS;101 M 1.72 61 102 F 1.68 52;PROC PRINT
20、 LABEL;注意:PRINT过程的PROC PRINT语句中应加LABEL选择项。,指定变量的输出格式。对于日期时间型变量必须指定其格式。如:DATA EMPLO;INPUT NAME$T DATE7.;FORMAT T WORDDATE.;CARDS;ZHONGLI 15JAN84 LIUWEI 03MAR85;PROC PRINT;Run;FORMAT语句把SAS输出格式WORDDATE.变量T联系起来。,5.FORMAT 语句,data time;x=date();format x yymmdd8.2;put x=;run;给出今天的日期。,timepart函数 计算日期值的时间部分。
21、,data time;input x datetime18.;format x datetime18.;cards;29nov2012:09:25:0003dec2012:10:23:50;proc print data=time;run;data time2;set time;y=timepart(x);format y time8.;run;proc print data=time2;run;,6.MISSING 语句格式:MISSING values;MISSING语句表明:在录入的数据中的某些值代表数值型数据的缺项值。例如,假设字母“A”代表在调查时家中无人,字母“R”代表拒绝回答。D
22、ATA SURV;MISSING A R;INPUT ID ANSWER;CARDS;1001 2 1002 R 1003 1 1004 A 1005 2;MISSING语句规定,在录入的数据行中,值 A和R 被认为是特殊的缺项值,而不是无效的数值型数据值。,7.注释语句 在语句开头加一个星号,就表示该语句的内容是注释信息而不予执行。如:*-example-;data;label n=name h=height;input num n$h;cards;1001 zhang3 1.73 1002 li4 1.82;对于大段信息的注释,可用/*放在信息的开头,将*/放在注释信息的尾部。,八、过程步
23、介绍,1.过程步语句一些最基本的过程步语句,2.Print语句,打印数据集的数据与output窗口。,3.Sort过程,SAS中有许多与BY语句配合使用的语句,在使用之前均要对数据集进行配需。一般用SORT语句进行排序。SORT过程的语句格式:proc sort data=数据集名;by 变量名;run;说明:(1)proc语句规定开始运行sort过程必须制指定要排序的数据集名;(2)在sort语句中必须使用by语句,用来规定要进行排序的变量。Descending置于变量名前,是制定是升序还是降序排列,默认是升序。,4.TRANSPOSE过程,TRANSPOSE过程是对数据集进行转置的过程。语
24、句格式:proc transpose data=数据集名;var 变量名列表;id 变量名;idlabel 变量名;copy 变量名列表;by 变量名列表;Run;,语句说明:,(1)proc语句规定开始运行transpose过程,同时指定要转置的数据集名;(2)var语句规定原数据集中要转置的变量。如果不指定则只转置数值型变量。不对字符型变量转置;(3)ID语句规定原数据集中的一个变量,该变量的值为转置后数据集中的变量名。(4)IDLABEL语句用来规定一个变量为转置后的数据集提供标签。(5)copy语句对列出的变量不进行转置而是直接复制到输出的数据集中。(6)by语句规定对每个by分组内的数据进行转置,但是by变量不进行转置而直接复制到输出数据集中。,