第04章_SAS过程步与过程步语句
- 格式:ppt
- 大小:93.00 KB
- 文档页数:17
第4章SAS过程步与过程步语句摘要:本章讲授过程步一般形式,SAS过程步的常用语句,程序设计中通用的SAS语句,学习过程步常用有关语句功能及其用法。
为后面统计分析过程的调用作好准备。
SAS过程步用来调用系统提供的标准常用过程或统计分析过程,对指定的SAS 数据集进行处理,并将分析结果显示输出到OUTPUT窗口。
一个过程步是一个功能程序模块,调用不同的过程可实现用不同方法对数据进行分析。
§4.1 SAS过程步的一般形式通常,SAS过程步的一般形式为:PROC 过程名选择项;[其他相关过程步语句;]RUN;说明:1.PROC表示一个过程的开始;“过程名”可以是后面各章节将要介绍的常用过程名或统计过程名。
不同的过程有不同的专用SAS名,而且各有一些可供选择的选择项(参数),对于同一过程,给定不同的参数,输出不同的计算结果和不同表格形式。
2.选项:选择项一般以关键字为核心构成,常用下面三种形式:①关键字在过程中,一个关键字代表该过程的某一特性,若关键字作为选项出现,则过程处理数据或输出结果时,这一特性予以考虑。
否则,忽略这一特性。
②关键字=值过程的某一特性可取不同的值,则指定该特性的书写格式为:特性关键字=特性值(数字或字符串)。
③关键字=SAS数据集有些过程需要特定的输入数据集,有些过程可以建立一些特殊的数据集。
过程指定特别输入输出数据集的选项书写格式为:关键字=数据集名该形式规定输入或输出的数据集,最常用的是DATA=数据集,指出本过程要处理的数据集名称,若缺省,则使用最新建立的数据集。
如“PROC PRINT DATA=new;”。
3.其他相关过程步语句:有VAR、ID、BY、CLASS、WEIGHT等过程步语句,将在下一节中讲述。
4.RUN的作用是通知系统开始执行本过程程序段,当一个程序文件中有几个过程时,它们可共用一个RUN语句。
5.常用的过程步名称及功能:SAS程序中涉及的过程多达数百种,实现统计功能时常用的过程也有数十种之多,现将最为常用的过程名称及其所能实现的功能列入下表(表4.1),以便各位提前热热身。
sas有两种语句:数据步和过程步。
在sas中,通过数据步和过程步来使用sas语言的元素。
数据步:是一组语句组合:从外部文件中读取数据;将数据写入到外部文件中;读取sas数据文件和视图;创建sas数据文件和视图。
过程步:对sas数据集进行分析和产生报表。
例如:对数据集进行分析、画图、查询和打印等操作。
逻辑库:由一组sas文件组成。
sas软件系统的信息组织有两层,第一层是sas逻辑库,第二层是sas文件。
sas逻辑库是一个逻辑概念,本事并不是物理实体,它对应的实体是操作系统下一个文件夹或几个文件夹中的一组sas文件。
sas逻辑库是一组存储在同一目录下被同一引擎访问的文件,其他文件也可以存放在该目录下,但是只有能被sas识别的文件才能显示在逻辑库中。
建立sas逻辑库:用libname语句libname libref <engine>'sas-data-library'其中libref是逻辑库名,sas-data-library是逻辑库对应的物理地址,engine:引擎名称。
libname resdat 'D:\resdat';--创建逻辑库resdat,对应的物理文件夹为D:\resdatlibname a ('d:\resbd\','d:\resfin\');--多个文件夹创建一个sas逻辑库临时逻辑库;指它的内容只在启动sas时存在,退出sas时内容完全被删除。
系统默认的临时逻辑库为work,引用临时库中的文件时,可以不加库名work。
永久逻辑库:它的内容在sas关闭对话之后仍旧保留,直到再次修改或删除。
sas除了work 以外的逻辑库都是永久库。
引用永久逻辑库的文件时必须加上永久逻辑库名。
例如:sashelp.Abmfolder库引擎:是一组规定格式想逻辑库读写文件的内部命令。
每个sas逻辑库都对应一个库引擎。
sas逻辑库引擎是软件的一个元件用来组建sas与sas逻辑库之间的接口。
SAS分析常用的过程过程步大全为区分过程名称的拼写,故意部分小写,以便识别和记忆。
基本SAS程序代码结构:---------PROC MODE data=Arndata.moddat; /* 命令的解释*/var y x1-x6; /* 命令的解释 */model y = x1-x6;run;------------------------------------------正态性检验PROC UNIvariate---------PROCUNIvariate data=Arndata.unidat;var x1;run;------------------------------------------相关分析和回归分析PROC REG 回归---------PROC REG data=Arndata.regdat;var y x1-x6;model y = x1-x6 / selection=stepwise;/* 加入逐步回归选项 */print cli; /* 加入输出预测结果部分,还可以输出acov,all,cli,clm,collin,collinoint,cookd,corrb,covb,dw(时序检验统计量),i,influence,p,partial,pcorr1,pcorr2,r,scorr1,scorr2,seqb,spec,ss1,ss2,stb,tol, vif(异方差检验统计量),xpx*/plot y*x2 / conf95; /* 做散点图 */run;---------------------------------------------------DATA Arndata.regdat;x2x2 = x2*x2;x1x2 = x1*x2;PROC REG data=Arndata.regdat;var y x1 x2 x2x2 x1x2 ; /* 多项式回归,非线性回归 */model y = x1 x2 x2x2 x1x2 / selection=stepwise; /* 加入逐步回归选项*/print cli;plot y*x2 / conf95; /* 做散点图 */run;------------------------------------------PROC RSreg 二次响应面回归PROC ORTHOreg 病态数据回归PROC NLIN 非线性回归PROC TRANSreg 变换回归PROC CALIS 线性结构方程和路径分析PROC GLM 一般线性模型PROC GENmod 广义线性模型方差分析PROC ANOVA 单因素均衡数据和非均衡数据---------PROC ANOVA data=Arndata.anovadat; /* 命令的解释 */class typ; /* 命令的解释 */model y = typ; /* 可以看出此处是单因素方差分析(分类型自变量对数值型自变量的影响) */run;------------------------------------------PROC GLM 多因素非均衡数据:---------PROC GLM data=Arndata.glmdat; /* 命令的解释*/class typea typeb; /* 命令的解释 */model y = typea typeb; /* 可以看出此处是不考虑交互作用的多因素方差分析(分类型自变量对数值型自变量的影响) */run;---------------------------------------------------PROC GLM data=Arndata.glmdat; /* 命令的解释*/class typea typeb; /* 命令的解释 */model y = typea typeb typea*typeb; /* 可以看出此处是考虑交互作用的多因素方差分析(分类型自变量对数值型自变量的影响) */run;------------------------------------------主成分分析PROC PRINcomp---------PROCPRINcomp data=Arndata.pmdat n=4 out=w1 outstat=w2 ;var x1-x6;PROC print data=w1;PROC plot data=w1 vpct=80; /* 一句话,其实print就是plot输出图形的文字形式而已 */plot prin1*prin2 $ districts='*'/haxis=-3.5 to 3 by 0.5 HREF=-2,0,2vaxis=-3 to 4.5 by 1.5 HREF=-2,0,2; /* 主成分的散点图,也就是载荷图 */run;------------------------------------------因子分析PROC FACTOR---------PROC FACTOR data=Arndata.factordat simple corr ;var y x1-x6;title'18个财务指标的分析';title2'主成分解';run;PROC FACTOR data=Arndata.factordatn=4 ; /* 选择4个公共因子 */ var y x1-x6;run;PROC FACTOR data=Arndata.factordat n=4rotate=VARImaxREorder; /* 因子旋转:方差最大因子法 */var y x1-x6;run;------------------------------------------PROC SCORE---------PROC FACTOR data=Arndata.factordat n=4rotate=VARImax REorder score out=score_Out; /* 输出因子得分矩阵 */run;PROC print data=score_Out;var districts factor1 factor2 factor3 factor4;run;PROC plot data=score_Out;plot factor1*factor2 $ districts='*' / href=0 Vref=0; /* 因子的散点图,也就是载荷图 */run;------------------------------------------典型相关分析PROC CANcorr基本SAS程序代码结构:---------DATAjt(TYPE=CORR); /*TYPE=CORR 表明数据类型为相关矩阵,而不是原始数据, type还可以是cov,ucov,factor,sscp,ucorr等*/input names$ 1-2(x1 x2 y1-y3)(6.); /* name $ 表示读取左侧的变量名,1-2表示变量名的字符落在第1,2列上 */cards;x1 1 0.8 ……x2 ……y1 ……y2 ……y3 ……;PROC CANcorrdata=Arndata.cancorrdatedf=70 redundancy; /* 误差自由度的参考值,默认值是n=1000;redundancy表示输出冗余度分析的结果 */var x1 x2;with y1 y2 y3;run;------------------------------------------对应分析 /* 交叉表分析的拓展,寻找行和列的关系,一般行指代各种cases,而列代表各种visions */PROC CORResp---------PROC CORRespdata=Arndata.correspdat out=result;var x1-x6;id Type;run;options ps=40;proc plot data=result;plot dim2*dim1="*" $ Type / boxhaxis=-0.2 to 0.3 by 0.1Vaxis=-0.1 to 0.3 by 0.1Href=0 Vref=0;run;------------------------------------------聚类分析PROC CLUSTER---------PROC CLUSTER data=Arndata.clusdatmethod=ave outtree=clusdat_Out;var x1-x6;id datid;run;proc tree horizontal; /* 做聚类树 */run;------------------------------------------PROC FASTclus---------PROC FASTclus data=Arndata.clusdatmaxclusters=3 list out=clusdat_Out;var x1-x6;id datid;run;------------------------------------------PROC ACEclusPROC VARCLUS---------PROC VARclus data=Arndata.clusdat;/* 系统默认使用主成分法聚类 */var x1-x6;run;---------PROC VARclus hierarchy data=Arndata.clusdat; /* 保证分析过程中不同水平的谱系结构 */var x1-x6;run;---------PROC VARclus centroid data=Arndata.clusdatouttree=clusdat_out; /* 使用重心法聚类 */ var x1-x6;run;------------------------------------------PROC TREE---------PROC TREE data=Arndata.clusdat horizontal; /* 使用TREE过程绘制聚类谱系图*/var x1-x6;run;------------------------------------------判别分析PROC DISCRIM---------PROC DISCRIM data=Arndata.discrimdatlist out=discrimdat_Out distance pool=yes;class Typ; /* 指定分类变量 */var x1-x6; /* 用于建立判别识别函数的变量 */id iddiscrim; /* 标注样本的变量 */run;---------第二种方法,将需要判别的新样本放在testdata里:---------PROC DISCRIM data=Arndata.discrimdat1testdata=Arndata.discrimdat2testlist testout=discrimdat_Out; /* 将原来的几个选项加注test标示 */class Typ; /* 指定分类变量 */var x1-x6; /* 用于建立判别识别函数的变量 */id iddiscrim; /* 标注样本的变量 */run;------------------------------------------PROC STEPdisc:逐步判别分析过程---------PROC STEPdisc method=stepwise data=Arndata.discrimdatSLentry=0.10 SLstay=0.10; /* 设定引入和剔除的显著性水平 */class Typ; /* 指定分类变量 */var x1-x6; /* 用于建立判别识别函数的变量 */run;------------------------------------------PROC CANdisc: Fisher判别分析过程---------PROC CANdiscdata=Arndata.discrimdatout=discrimdat_Outdistance simple;class Typ; /* 指定分类变量 */var x1-x6; /* 用于建立判别识别函数的变量 */run;proc print data=discrimdat_Out;run;-----------------------------------------------------------------------------------------------------------------------------------------------------------友情协助:特征库豆瓣统计学小组 /group/stats。