《2022年SAS入门教程 .pdf》由会员分享,可在线阅读,更多相关《2022年SAS入门教程 .pdf(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第一章 SAS系统概况SAS(Statistic Analysis System)系统是世界领先的信息系统,它由最初的用于统计分析经不断发展和完善而成为大型集成应用软件系统;具有完备的数据存取、管理、分析和显示功能。在数据处理和统计分析领域,SAS 系统被誉为国际上的标准软件系统。SAS 系统是一个模块化的集成软件系统。SAS 系统提供的二十多个模块(产品)可完成各方面的实际问题,功能非常齐全,用户根据需要可灵活的选择使用。Base SAS Base SAS 软件是 SAS 系统的核心。主要功能是数据管理和数据加工处理,并有报表生成和描述统计的功能。Base SAS 软件可以单独使用,也可以同
2、其他软件产品一起组成一个用户化的SAS 系统。SAS/AF 这是一个应用开发工具。利用SAS/AF 的屏幕设计能力及SCL 语言的处理能力可快速开发各种功能强大的应用系统。SAS/AF 采用先进的OOP(面向对象编程)的技术,是用户可方便快速的实现各类具有图形用户界面(GUI)的应用系统。SAS/EIS 该软件是 SAS 系统种采用OOP(面向对象编程)技术的又一个开发工具。该产品也称为行政信息系统或每个人的信息系统。利用该软件可以创建多维数据库(MDDB),并能生成多维报表和图形。SAS/INTRNET SAS/ACCESS 该软件是对目前许多流行数据库的接口组成的接口集,它提供的与外部数据
3、库的接口是透明和动态的。第二章Base SAS软件第一节SAS 编程基础SAS 语言的编程规则与其它过程语言基本相同。SAS 语句一个 SAS 语句是有 SAS 关键词、SAS 名字、特殊字符和运算符组成的字符串,并以分号(;)结尾。注释语句的形式为:/*注释内容*/或*注释内容。二、SAS 程序一序列 SAS 语句组成一个SAS 程序。SAS 程序中的语句可分为两类步骤:DATA 步和名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 14 页 -PROC 步。这两类步骤是所有SAS 程序的模块。通常用 DATA 步产生 SAS 数据集,而用 PROC步对 SAS 数据集内的数据进
4、行分析处理并输出结果。SAS 程序是在Editor 窗口采用全屏幕编辑方式输入。当程序输入完毕后,就可以提交给 SAS 系统执行,在菜单中选择Submit 或按 F3 键都可以运行程序,也可以只提交一部分语句。LOG 窗口显示程序执行过程中记录的信息,它包括执行的语句,生成的数据集中变量的个数及记录的个数,每一步花费的时间及出错信息等。SAS 过程产生的输出显示在OUTPUT 窗口。SAS 数据集SAS 数据集相当于其它数据库系统的表(Table);每一行称为一个观测,相当于其它数据库系统的一条记录;每一列称为一个变量。SAS 的变量只有两种类型:数值型和字符型;变量的长度缺省时为8 个字节,
5、用关键字 LENGTH 定义变量长度;可以对变量的输入、输出格式进行定义,用关键字INFORMA T、FORMAT来分别定义;还可以给变量加标签,标签是一个代替变量名的描述性标识,可以在一些确定的SAS 过程中代替变量名被打印出来,用关键字LABEL 定义。SAS 数据集在系统中以文件的形式存在,扩展名是.sas7bdat。每次启动 SAS 系统后,系统自动开辟一个库名为WORK 的临时存贮区,用来存贮 DATA 步或其它过程生成的临时数据集。一旦退出SAS 系统,这个临时存贮区就被删除,其中所有的临时数据文件也被删除。为了创建永久的数据集,必须给这个数据集规定存贮的地方和名字两部分,第一部分
6、称为库标记或逻辑库名(Libref),它总是使用LIBNAME语句把库标记和一个目录联系起来,用来指示数据集存贮的地方。例如:libname develop d:projectsdevelopdata develop.t_itemsum表明数据集t_itemsum 存贮在 d:projectsdevelopdata 目录下。tmp 或work.tmp 表明数据集tmp 存贮在临时存贮区中。SAS 表达式和 SAS 函数SAS 语言的表达式与其它过程语言略有不同。SAS 语言中数值型变量的缺失值是一个小数点(.),字符型变量的缺失值是空()。在一个四则运算的表达式里面,如果有一个缺失值,那么整个
7、运算的结果就是.;如果用户不想让缺失值参加算术运算,可使用SAS 的样本统计函数,如SUM(),MEAN()等。如果除法运算的除数为0,那么运算的结果也是.。表示时间的变量在数据集里经常被定义为数值型,0 代表的是1960 年 1 月 1 日,1 代表的是 1960 年 1 月 2 日,-1 代表的是1959 年 12 月 31 日,以此类推。我们可以用FORMA T定义时间的输出格式,如:yymmdd10.这种格式显示的时间形式如 2001-05-01。时间常数可以表示成 01MAY2001d 的形式,如:if occdate=01MAY2001d。算符|连接两个字符值,连接算付不清里开头和
8、结尾的空格,如:如果 itemid=622 ,itemname=逾期贷款 ,那么 itemid|.|itemname=622.逾期贷款 。如果要去掉空格,就要使用SAS 函数 TRIM 和 LEFT,trim(left(itemid)|.|trim(left(itemname)=622.逾期贷款 。名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 14 页 -下面是一些常用的函数:字符函数:TRIM(s):去掉 s 尾部空格;LEFT(s):字符串 s 的表示式采用左对齐,即去掉s 开头的空格;SUBSTR(s,p,n):从字符串s 中的第 p 个字符开始抽取n 个字符的子串。LE
9、NGTH(s):给出字符串s的长度;INDEX(s,s1):搜寻字符串s1 在字符串s 中的位置;INPUT(s,informat):字符 s 的输入格式为informat,如:INPUT(1960-01-01,yymmdd10.)=0;PUT(s,format):将 s 按 format 的格式输出,如:PUT(0,yymmdd10.)=1960-01-01,结果一定为字符型;SYMPUT(x1,x2):把 x2 的值赋给宏变量x1 SYMGET(x):取得宏变量x 的值;时间和日期函数:DATE():取当前日期;DATETIME():取当前日期和时间;YEAR(date)、MONTH(da
10、te)、QTR(date)、DAY(date):分别取 date表示的年、季度、月份、日。INTX(in,from,nu):按给定的时间间隔in年(year)、季度(qtr)、月份(month)、日(day),从日期from,推算出nu 个时间间隔后的日期的第一天。如:PUT(INTNX(qtr,INPUT(1960-02-01,yymmdd10.),2),yymmdd10.)=1960-07-01第二节DATA 步(数据步)DATA 步是用 DATA 语句开始的一组SAS 语句,用来创建SAS 数据集。本小节将介绍一些在 DATA 步中常用的SAS 语句。创建 SAS 数据集及输出文件或报表
11、1.数据在作业流中就是用 SAS 语句从作业流中输入数据来产生SAS 数据集。一般的形式为:DATA 语句;/*给出要产生的数据集的名字*/INPUT 语句;/*对每个变量给出名字及类型*/(用于 DATA 步的其它SAS 语句)CARDS;/*标志数据行开始*/数据行 ;例:data tmp;名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 14 页 -input sex$x1-x3;cards;F 1 2 3 M 4 5 6;2.数据来自外部文件从磁盘上读入数据文件产生SAS 数据集。一般的形式为:DATA 语句;/*给出要产生的数据集的名字*/INFILE 语句;/*打开包含
12、数据的外部文件*/INPUT 语句;/*对每个变量给出名字及类型*/(用于 DATA 步的其它SAS 语句)RUN;例:data tmp;infile c:f1.dat;input sex$x1-x3;z=(x1+x2+x3)/3;run;3.数据来自其他SAS 数据集由已存在的数据集创建新的数据集。DATA 语句;/*给出要产生的数据集的名字*/SET|MERGE|UPDATE|MODIFY语句;/*给出已存在的数据集的名字*/(用于 DATA 步的其它SAS 语句)RUN;例:data tmp;set tmp;if sex=F;run;4.把 SAS 数据集转换为外部数据文件或输出报表产生
13、外部数据文件或在打印机上输出报表。DATA _NULL _;/*_ NULL _意味着不产生数据集*/INPUT 和 CARDS|INFILE 语句或者 SET|MERGE|UPDA TE|MODIFY语句;/*为输出提供数据*/FILE 语句;/*输出报表或存贮文件*/PUT 语句;/*要输出的变量*/(用于 DATA 步的其它SAS 语句)RUN;例:data _null _;set tmp;file c:f1.dat;(或者 file prn;)put x1 x2;run;二、DATA 步流程NO 名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 14 页 -三、用在 DAT
14、A 步的文件操作语句DATA 语句和 SET 语句DATA 语句表示一个数据步的开始,并给出正在创建的数据集的名字。SET 语句给出用来创建新的数据集的已存在的数据集的名字。例:data year1999 year2000 year2001;set year qtr month;if year=1999 then output year1999;else if year=2000 then output year2000;else if year=2001 then output year2001;run;MERGE 语句(合并语句)MERGE 语句是把两个或两个以上的数据集中的观测合并为新生
15、数据集中的一个观测。例:data data3;merge data1(in=in1)data2(in=in2);by x1;/*数据集必须先按变量x1 排序*/if in1 and in2;/*变量 x1 取当前值的观测在data1 和 data2 中都存在*/DATA 步开始是否还有没有处理的观测?用 INPUT 或 SET,MERGE,UPDATE 和 MODIFY语句读入一个观测用一些程序语句对观测进行处理程序语句结束或用OUTPUT 语句输出当前观测到SAS数据集SAS 数据集形成。开始下一个DATA步或 PROC 步。名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 14
16、 页 -run;UPDATE 语句(更新语句)UPDATE 语句是用一个修改数据集中的观测来修改一个主数据集。例:data new;update oldmaster trans;by id;/*数据集必须先按变量id 排序*/run;BY 语句BY 语句在 DATA 步中用以控制SET,MERGE,UPDATE 或 MODIFY 语句的操作,并且建立特殊的分组变量。例:proc sort data=degress;by state city;run;在 DATA 步中,SAS 系统对每个BY 组(含有 BY 值的所有观测组成一个BY 组)创建两个临时变量:FIRST.variable 和 LA
17、ST.variable,他们用来区别每个BY 组的第一个和最后一个观测。当某个观测在BY 组中是第一个观测时,FIRST.variable 的值置为1;而这个 BY 组的其它所有观测的FIRST.variable 的值为 0。类似地,当某个观测在BY组中是最后一个观测时,LAST.variable 的值置为1;而这个BY 组的其它所有观测的LAST.variable 的值为 0。用在 DATA 步的运行语句DELETE 语句(删除语句)DELETE 语句告数 SAS 系统停止处理当前的观测。这个观测不会被输出到正被创建的数据集中,而且系统返回到这个DATA 步的开头处理其它观测。例:data
18、tmp;set tmp;if sex=F then delete;run;STOP 语句(停止语句)用来停止处理当前的DATA 步,正被处理的那个观测没有添加到数据集上。例:data out;名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 14 页 -set in;if _n_=11 then stop;/*生成的数据集中将只包含10 个观测*/run;WHERE 语句从输入数据集中读满足条件的观测进行处理。例:data out;set in;where sex=F;run;OUTPUT 语句(输出到数据集语句)OUTPUT 语句告诉SAS 系统输出当前的观测到正被创建的数据集中
19、。例:data out1 out2;set in;if sex=F then output out1;if sex=M then output out2;run;用在 DATA 步的控制语句DO 语句(循环语句)5.简单 DO 语句if x5 then do;x=x-5;y=y+5;end;6.循环 DO 语句do I=1 to 5 do;x=x-5;y=y+5;end;7.DO WHILE 语句do while x=5;x=x-5;y=y+5;end;SELECT 语句(选择语句)例:select(x);when(0)put x=0;when(1)put x=1;otherwise put
20、x=-1;end;或写成下面的形式:select;when(x=0|x=1)put x=x;otherwise put x=-1;end;IF 语句(条件语句)例:if x=1 then do;/*当条件成立时,执行下面一个DO 组*/x=0;put x=0;end;else do;/*当条件不成立时,执行下面另一个DO 组*/x=1;put x=1;end;用在 DATA 步的信息语句FORMAT 语句(格式语句)规定变量的输出格式。例:data _null_;a=0;b=1000000.00;format a data7.b comma16.2;名师资料总结-精品资料欢迎下载-名师精心整理
21、-第 8 页,共 14 页 -put a b;run;程序执行结果在LOG 窗口输出:01JUN1960 1,000,000.00;LENGTH 语句(长度语句)定义数据集中变量的名称、类型和长度例:data new;length a b$10 c d 8;stop;run;创建一个新的数据集new。含有四个变量,a和 b 是字符型,长度为10 个字节;c和 d 是数值型,长度为8 个字节。数据集中没有观测。即使不是用LENGTH 语句,DATA 步中的任何一个赋值语句左边的变量也会被作为正被创建的数据集中的一个变量被输出到数据集中。例:data new;length x 8;do I=1 t
22、o 5;x=I;output;end;run;生成的数据集new 中有五个观测和两个变量x、i。LABEL 语句(标签语句)对变量给出标签。这个标签在SAS 数据集中同变量名一起被存贮,而且可以通过许多 SAS 过程被打印输出。例:label occdate=数据日期 unitname=分行名称;DROP 语句(删掉变量语句)用来规定不包含在SAS 数据集中的变量。例:data new(drop=a);set old(drop=b);run;如果数据集old 中含有变量a,b,c,那么数据集new 中只含有变量c。名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 14 页 -KEE
23、P 语句(保留变量语句)用来规定包含在SAS 数据集中的变量。例:data new(keep=a b);set old;run;不管数据集old 中含有几个变量,数据集new 中只含有变量a b。RENAME 语句(换名语句)例:data new(rename=(x1=y1 x2=y2);data new;set old;set old;x1=x1-5;等价于:rename x1=y1 x2=y2;run;x1=x1-5;run;因为上面的例子中变量的新名字在输出数据集中才起作用,在当前的DATA 步的程序语句中应仍使用老名字。而在下面的例子中,应使用新名字:data new;set old(
24、rename=(x1=y1 x2=y2);y1=y1-5;run;RETAIN 语句(保留语句)该语句使得变量值在DATA 步从当前这次到下一次重复时被保留。例:data new;set old;length sum 8;retain sum;if _n_=1 then sum=x;else sum=sum+x;run;在新的数据集中增加变量sum,sum 的值等于第一条观测到当前观测的变量x 的值的累加。如果没有retain 语句,那么第一条观测以后的sum 值均为缺失值。第三节全程语句全程语句可以用在SAS 程序的任何地方。名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 1
25、4 页 -FILENAME 语句(文件名语句)和%INCLUDE 语句FILENAME语 句 用 文 件 标 记 指 示 一 个 外 部 文 件 的 全 名 字(目 录 加 上 文 件名)。%INCLUDE语句被用来取出SAS 语句和数据行,相当于其它语言中的子程序调用。例:filename count d:projectsdeveloppgmcount.sas;%include count;/*执行程序d:projectsdeveloppgmcount.sas*/第四节PROC 步(过程步)PROC 步是用 PROC 语句开始的一组或几组SAS 语句。在PROC 步,可以通过过程的名字来调用
26、过程一个已经为你写好的程序。下面介绍一些常用的SAS 过程:SQL 过程(结构查询语言过程)将用结构化查询语言编写的SQL 语句放到SAS 系统的 PROC SQL 语句的后面,不需要使用 RUN 语句,当你提交该过程后,SQL 语句便被执行。例:proc sql;create table new as select x,y,z from old where x0;SORT 过程(排序过程)SORT 过程常用于将数据集分类排序,以便其他SAS 过程通过使用BY 语句可以直接调用它,在对SAS 数据集进行合并和更新之前,也必须先进行分类排序。例:proc sort data=develop.t_
27、accinfo out=project_info nodupkey;by unitid descending projectid;run;该过程对数据集develop.t_accinfo 先按 unitid 的升序排列,在每一个unitid 组里面再按 projectid 的降序排列,生成数据集project_info,nodupkey 表示删除by 值相同的观测。如果没有指定out=数据集,则将排序后的结果输出到原来的数据集中。APPEND 过程(附加过程)该过程将一个SAS 数据集的观测附加到另一个SAS 数据集的后面。如果用 DATA 步去连接两个数据集,SAS 系统必须在处理完两个数据
28、集中的所有观测后再产生一个新的数据集。APPEND 步避免处理原始数据集中的数据,直接把新名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 14 页 -观测添加到原始数据集的后面。例:proc append base=old data=new;run;该过程用于将DATA=数据集中的观测添加到BASE=的数据集中。如果两个数据集中的变量名称或长度不同,要在PROC 语句中加FORCE 选项。DATASETS 过程(数据库管理过程)该过程用于对SAS 数据库中的SAS 文件进行列表、拷贝、换名、添加和删除等操作。CONTENTS 过程(内容过程)该过程提供SAS 数据库中关于SAS
29、 文件的有关信息。如:文件的名称、类型、创建时间、修改时间、观测数、变量、索引等。并自动输出到OUTPUT 窗口。可以用 OUT=数据集将信息输出到一指定的数据集中。例:proc contents data=develop.t_unitdef out=info;run;FORMAT 过程(定义格式过程)在 SAS 系统中,用户可以使用PROC FORMA T 过程定义自己的格式。各是可以被赋予:单个数字:procformat;value sexfmt 1=Female2=Male other=Miscoded;run;某一数字范围:procformat;value boardfmt low-4
30、9=Below Average50-99=Average100-high=Above Average;run;字符、字符串或某一范围的字符procformat;value$grade A=GoodB-D=FairE,F=Poor other=Miscoded;run;名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 14 页 -SUMMARY 过程(概括过程)例:procsummarydata=personal nway;class sex;var salary;outputout=personal(drop=_freq_ _type_)sum=salary;run;该过程按 s
31、ex 的值分组,对每组的salary 的值求和。TABULATE 过程(制表过程)PROC TABULATE 过程可以产生格式化的汇总表格。最简单的 TABULATE过程必须定义下列要素:CLASS 语句定义分类变量VAR 语句定义分析变量TABLE 语句定义表格的结构和格式(操作符:逗号转另一维,空格表格连排,星号交叉组合分组)例:proctabulatedata=personal;class sex;var salary;table sex,salary*mean;run;将输出如下的表格:salary mean sex 52.00 F M 55.00 第五节SAS 宏功能一、SAS 宏变
32、量定义宏变量:%let macro-variable-name=value;或:call symput(macro-variable-name,value);引用宏变量:(就是用宏变量的内容直接代替宏变量名)¯o-variable-name 名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 14 页 -二、SAS 宏调用相当于其他语言的函数。其定义的一般形式如下:%MACRO macro-name(parameters);macro-text%MEND macro-name;引用宏调用的形式如下:%macro-name(parameter-values);第六节常见问题分析1.判断记录集是否为空方法一:%let isEmpty=1;data_null_;set&dataset nobs=rows;if rows0thencall symput(isEmpty,0);stop;run;方法二:%let isEmpty=1;proccontentsdata=&dataset out=tmp noprint;run;data_null_;set tmp;if nobs0thencall symput(isEmpty,0);run;第七节练习名师资料总结-精品资料欢迎下载-名师精心整理-第 14 页,共 14 页 -