《SAS编程技术全局通用语句课件.ppt》由会员分享,可在线阅读,更多相关《SAS编程技术全局通用语句课件.ppt(60页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第11章章 全局通用语句全局通用语句清华大学经管学院清华大学经管学院 朱世武朱世武ZResdat样本数据:样本数据:SAS论坛:论坛:v全局通用语句是可以用在任何地方的SAS语句。这些语句既可以用在数据步(DATA步),也可以用在过程步(PROC步),甚至还可以单独使用。注释语句注释语句 v注释语句可以放在SAS程序的任何地方作为程序的说明,或者介绍整个程序的步骤或算法等。语句格式格式一:*message;信息的长度可任意,但不能包含分号(;),最后的分号表示信息结束。格式二:/*message*/中间的信息可以包含分号,但这种形式的注释不能嵌套。应用举例应用举例 例11.1注释语句应用。p
2、rocprintdata=ResDat.stk000002(obs=10)noobs;/*输出前10个观测,不输出观测序号*/varopprhiprloprclpr;title股票行情;run;procmeansdata=ResDat.stk000002;*对数据集ResDat.stk000002使用means过程;varopprhiprloprclpr;/*输出变量opprhiprloprclpr的均值*/run;例11.2标准SAS程序开头,记录SAS程序信息的注释形式。/*-*/*-BeginEstimationforGrunfeldsInvestmentModels-*/*-SeeSA
3、S/ETSUsersGuide,Version5Edition,-*/*-pages-*/*-*/X语句语句 运行SAS系统时,发布主机操作系统命令。语句格式:X;其中:command规定主机操作系统的命令。例11.8应用举例。xmkdird:ResDat1;libnameResDat1d:ResDat1;dataResDat1.class;setResDat.class;run;例中,在SAS会话期间用主机操作系统命令创建一个目录D:ResDat_3.注意:键入EXIT命令退出操作系统返回到SAS会话。TITLE语句语句 TITLE语句规定SAS输出文件和其它SAS输出标题。每一个TITLE
4、语规定一级标题,最多可规定10级标题。语句格式:TITLE;其中:n紧跟在词TIILE后面(不能有空格)的数字,用来规定标题的级别;text规定标题的内容。规定标题的内容一直有效,但可以重新规定或取消。例11.9只规定第1和第5级标题的内容时,中间标题为空白。titlethisisthe1thtitleline;title5thisisthe5thtitleline;例11.10取消所有标题内容。title;例11.11取消第3级及以后的所有标题内容。title3;FOOTNOTE语句语句 FOOTNOTE语句在每一页的底部输出一些脚注行。最多可产生10个脚注行。语句格式:FOOTNOTE;其
5、中:n紧跟在词FOOTNOTE后面(不能有空格)的数字,用来规定脚注的行号;text规定脚注行的内容。规定的脚注行内容将输出在所有过程的输出页上,但可以重新规定或取消。例11.12规定脚注。footnote清华大学金融系;例11.13取消所有已规定的脚注行。footnote;例11.14取消第3个及以后的所有脚注行。footnote3;RUN语句语句 RUN语句使SAS程序被执行。语句格式:RUN;其中:CANCEL让SAS系统结束当前步的执行。SAS将输出一个信息说明这一步没有执行。但CANECL选项不能阻止包含CARDS或CARDS4语句的DATA步执行。例11.15不能省略RUN语句的情
6、况。titleusingprocmeans;procmeansdata=ResDat.classminmax;varageheightweight;run;/*此RUN语不能省略省略RUN语句*/titleusingprocplot;procplotdata=ResDat.class;plotage*height;run;例中,第一个RUN语句在读第二个TITLE语之前执行PROCMEANS步。如果省略第一个RUN语,SAS系统在它读PROCPLOT语句之后执行PROCMEANS步。这时第二个TITLE语覆盖第一个TITLE语,也就是两个过程的输出都包含了标题USINGPROCPLOT。所以,
7、这种情况下,第一个RUN语不能省略。usingprocplot17MEANS过程变量最小值最大值-Age11.000000016.0000000Height51.300000072.0000000Weight50.5000000150.0000000-usingprocmeans16MEANS过程变量最小值最大值-Age11.000000016.0000000Height51.300000072.0000000Weight50.5000000150.0000000-不省略run省略run例11.16使用选项CANCEL。procmeansdata=ResDat.idx000001;varclp
8、rX;/*注意数据集中没有变量X*/runcancel;例中,当发现SAS程序有错误不能运行这一段序时,使用选项CANCEL结束当前步的执行。LIBNAME语句语句 vLIBNAME语句定义SAS逻辑库。vLIBNAME语句把一个libref(库标记名)和一个目录名联系起来,使用户可在SAS语句中使用库标记来指示这个目录。语句格式LIBNAMElibref;LIBNAMElibrefClear;LIBNAMElibref|_All_List;三种格式反映了LIBNAME语句的三种用法。选项说明应用举例应用举例 例11.18LIBNAME规定不同引擎的逻辑库。libnameSASDB1tapeS
9、AS-data-library;/*规定一个TAPE引擎*/libnameSASDB2V6SAS-data-library;/*规定版本为V6引擎*/libnameSASDB3ODBCSAS-data-library;/*规定版本为ODBC引擎*/例11.19不同引擎的逻辑库数据集的转换。libnameResDatv6v6D:ResDat;dataResDatv6.class;setResDat.class;run;例11.20对已经存在的逻辑库使用LIBNAME语句联系一个SAS引擎。libnameSASDB3ODBC;例11.21一个物理地址联系两个库标记。libnameResDat1D:
10、ResDat;libnameResDat2D:ResDat;run;例11.23脱离与库标记的联系。LIBNAMElibrefCLEAR;例11.24列出逻辑库的属性。libnameResDatlist;/*列出逻辑库ResDat的属性*/libname_all_list;/*列出所有逻辑库的属性*/run;例11.25多个物理地址指定一个逻辑库。libnamenew(d:resdatd:resstk);例11.26多个不同的逻辑库组成一个逻辑库。libnamenew(resdatresstk);FILENAME语句语句 vFILENAME语句把SAS的文件标记与外部文件的全名或输出设备联系起
11、来。v用INFILE,FILE,或%INCLUDE语句中调用SAS文件前,要先使用FILENAME语句来定义文件。v用户可以把一个文件标记同单个外部文件建立联系,也可以很多外部文件建立联系。v文件标记和文件名字之间的联系只保持在SAS会话期间,或下一个FILENAME语句再定义前。语句格式语句格式 建立文件标记与外部文件的联系:FILENAMEfilerefexternal-file;清除文件标记与外部文件的联系:FILENAMEfileref|_ALL_CLEAR;建立文件标记与某个输出设备的联系:FILENAMEfilerefdevice-type;列出外部文件的属性:FILENAMEfi
12、leref|_ALL_LIST;其它格式:FILENAMEfilerefCATALOGcatalog;FILENAMEfilerefFTPexternal-file;FILENAMEfilerefSOCKETexternal-file;FILENAMEfilerefSOCKET:portnoSERVER;选项说明选项说明 部分选项说明:设备类型(DEVICE-TYPE)应用举例应用举例 例例11.2911.29读入外部文件创建SAS数据集。filenamedelinfod:resdatdelinfo.txt;datadelinfo(label=退市信息|delistinformation);f
13、ormatstkcd$6.lstknm$12.lstdtyymmdd10.delistdtyymmdd10.exchflg$1.stktype$1.;informatstkcd$6.lstknm$12.lstdtyymmdd10.delistdtyymmdd10.exchflg$1.stktype$1.;labelstkcd=股票代码|stockcodelstknm=最新股票名称|lateststocknamelstdt=股票上市日|listdatedelistdt=退市日期|delistdateexchflg=交易所标识|exchangeflagstktype=股票类型|stocktype;
14、infiledelinfodelimiter=09xmissoverdsdfirstobs=2;inputstkcd$6.lstknm$12.lstdtyymmdd10.delistdtyymmdd10.exchflgstktype1.;run;例中,用文件标记delinfo识别外部文件(d:resdatdelinfo.txt),读取其中的数据行,创建一个临时数据集delinfo.例11.34将逻辑库的所有文件传送到一个压缩文件。filenameResDatd:ResDatResDat;proccportlibrary=ResDatfile=ResDatmemtype=data;run;例中,
15、将SAS逻辑库ResDat下的所有数据集传送到压缩文件ResDat中。例11.35恢复将传送压缩为一个逻辑库。libnameResDat_0d:ResDat_0;proccimportlibrary=ResDat_0infile=ResDat;run;例中,恢复由CPORT过程生成的传送压缩文件ResDat为原来的形式。MISSING语句语句 MISSING语句规定数值数据缺失值的代表字符。它通常出现在DATA步,但其使用范围是全局性的。语句格式语句格式MISSINGcharacter-1,其中:character缺失值代表字符。应用举例应用举例 例11.42读入有缺失值数据时必须用MISSI
16、NG语句。datafitness;missingnr;inputname$ageweight;cards;Wang2378HuR60TianRN;例中,N表示被调查人不知道,R表示被调查人拒绝回答问题。MISSING语句指示在输入数据行里N和R的值是缺失值而不是无效的数据值。nameageweightWang2378Hu R60Tian R NOPTIONS语句语句 vOPTIONS语句临时改变SAS系统的选项设置。v改变后的选项设置在以后的SAS会话或作业中保持有效,直到再次改变它们。v改变SAS系统选项可以用OPTIONS语句,或用显示管理命令OPTIONS菜单。语句格式:OPTIONSo
17、ption-1;其中:option规定要改变的SAS系统选项。例11.43运行调试好程序时常用的系统选项。OPTIONS NODATE NONOTES NOSOURCE;例中,运行调试好的大型程序时,为了抑制LOG和OUTPUT窗口的输出,用上面的系统选项就可以解决问题。第第18章章 IML编程技术编程技术清华大学经管学院清华大学经管学院 朱世武朱世武ZResdat样本数据:样本数据:SAS论坛:论坛:本章内容包括:本章内容包括:概述;理解IML语言;线型回归IML模块。矩阵操作;IML编程语句;SAS数据集操作;访问外部文件。概述概述 SAS/IML(InteractiveMatrixLan
18、guage)是在一种在动态和交互式环境下实现的强大而灵活的过程语言(交互式矩阵语言)。IML最基本的数据对象是矩阵。在SAS/IML模式下,可以立刻看到语句运行的结果,也可以把语句贮存在一个模块中为以后使用。SAS/IML软件特点软件特点 利用SAS/IML软件可以轻易地进行高效编程和使用一系列子程序。因为SAS/IML软件是SAS系统的一个模块,所以,可以使用SAS数据集和外部文件,也可以对一个已有的SAS数据集进行编辑或者创建一个新的SAS数据集。SAS/IML软件是一种编程语言;SAS/IML软件对矩阵作运算;SAS/IML软件有强大的算符功能,有许多函数和CALL子程序;SAS/IML
19、软件将算符应用到整个矩阵;SAS/IML软件是交互式的;SAS/IML软件是动态的;SAS/IML软件可以处理数据;SAS/IML软件可以作图。一个简单一个简单IML交互程序交互程序 例18.1求平方根IML程序。prociml;/*激活IML*/resetdeflib=ResDat;/*指定ResDat为缺省的SAS逻辑库*/startapprox(x);/*定义模块开始*/y=1;/*初始化y*/dountil(w1e-3);/*循环开始,le-3=0.001*/z=y;y=.5#(z+x/z);/*估计开方根,牛顿迭代*/w=abs(y-z);/*计算估计值之间的差异*/end;/*循环
20、结束*/return(y);/*返回近似值*/finishapprox;/*模块结束*/t=approx(3,5,7,9);/*调用函数APPROX*/printt;/*打印矩阵*/quit;run;T1.73205082.2360682.64575133OUTPUT窗口结果牛顿迭代法求f(z)=0一个实根的方法牛顿迭代法公式:上例中函数为:理解理解IML语言语言 定义矩阵定义矩阵SAS/IM软件对矩阵作运算,这里矩阵的定义同矩阵代数中矩阵的定义一样,是一个两维的(行列)数组。SAS/IM软件可以定义数值矩阵也可以定义字符矩阵。特殊矩阵定义:1N矩阵称作行向量;M1矩阵称作列向量;11矩阵称作
21、标量.矩阵名字与标识矩阵名字与标识 矩阵名字是一个合法的SAS名字,不能超过8字节。矩阵标识是由它的值表示的矩阵。例18.2矩阵名举例。A,XX,MATRIX1.例18.3矩阵标识举例。100,.,HI,12288,3,3,6,6.由矩阵标识创建矩阵由矩阵标识创建矩阵 创建标量矩阵例18.4创建标量矩阵。prociml;resetdeflib=ResDat;a=100;b=.;c=IML;创建数值矩阵含有多个元素的矩阵标识要用括号把元素括起来。用逗号将矩阵的行分开。例18.5由矩阵标识创建的数值阵。X=123456;/*定义一个行向量X*/Y=1,2,3,4,5;/*定义一个列向量Y*/Z=1
22、2,34,56;/*定义一个32矩阵Z*/W=3#Z;/*创建一个新矩阵W,它的每个元素是矩阵Z相应元素的3倍*/创建字符矩阵例18.6创建字符矩阵时,字符长度取最长字符的长度。a=IMLModual;/*字符长度以较长的字符为准,这里为6*/B=abcDEFG;重复因子重复因子用括弧括起来放在要重复的元素前面。例18.7用与不用重复因子的等价语句。ANS=2Yes,2No;ANS=YesYes,NoNo;赋值语句结果表达式:w=3#z;函数作为表达式:a=sqrt(b);y=inv(x);r=rank(x);表达式中的三种运算符表达式中的算符语句类型语句类型 SAS/IML软件语句大致分为三
23、类:控制语句;函数和CALL语句;命令语句。函数的一般形式:Result=Function(arguments);其中:Argument可以是矩阵名,矩阵本身或表达式。SAS/IML软件中的函数类型:矩阵查询函数;标量函数;概括函数;矩阵变形函数;矩阵算术函数;线性代数和统计函数。函数函数例18.8IML随机数函数应用举例。Rv=Uniform(Repeat(0,10,1);Rv=Ranuni(Repeat(0,10,1);Rv=Normal(Repeat(0,10,1);Rv=Rannor(Repeat(0,10,1);Rv=Ranbin(Repeat(0,10,1),20,0.5);Rv=
24、Rancau(Repeat(0,10,1);Rv=Ranexp(Repeat(0,10,1);Rv=Rangam(Repeat(0,10,1),1);Rv=Ranpoi(Repeat(0,10,1),2);Rv=Rantri(Repeat(0,10,1),3);例中,形式REPEAT(X,Y,Z)中,X是随机数种子,Y是产生的随机数个数,Z是产生的随机数列数。例18.9DATA步下随机数产生SAS程序例子。dataRV;retain_seed_0;/*retain赋初值0给_seed_*/mu=0;sigma=1;do_i_=1to1000;Normal1=mu+sigma*rannor(_s
25、eed_);/*均值为mu,标准差为sigma*/output;end;drop_seed_i_musigma;run;SAS/IML不支持OF语句:A=mean(ofx1-x10);在SAS/IML中x1-x10被当成x1减x10,而不是x1到x10.CALL语句与子程序语句与子程序CALL SUBROUTINE arguments;例18.10使用CALL子程序。calleigen(val,vec,t);calldelete(DAT);第一个例句,用CALL语句创建矩阵,得到矩阵t的特征值和特征向量。第二句,删除数据集DAT。例18.11自建子程序。start mymod(a,b,c);a
26、=sqrt(c);b=log(c);finish;runmymod(a,b,10);/*运行模型MYMOD*/runmymod(x,y,10);例中,建立一个模块MYMOD,分别得到输入矩阵的平方根和自然对数值。CALL的其它一用法:callgstart;/*激活graphics模块*/callgopen;/*打开一个新的graphics片段*/callgpoint(x,y);/*作散点图*/callgshow;/*显示散点图*/命令命令 利用SAS/IML命令用于实现一些具体的系统功能,例如,存贮和加载矩阵、或进行特定的数据处理等。例18.12SAS/IML命令用法举例。prociml;A=
27、123,456,789;B=222;shownames;storeab;showstorage;removeab;/*移走矩阵a,b*/showstorage;loadab;quit;prociml;A=123,456,789;B=222;printab;freeab;/*清空矩阵a,b*/printab;quit;缺失值缺失值 vSAS/IML软件也有缺失值的问题。注意,矩阵中的缺失值不能视为0,矩阵标识中,数值缺失值用点”.”表示。vSAS/IML软件支持缺失值的方式是有限的。许多矩阵运算不允许有缺失值,比如,矩阵乘法、矩阵求逆等。另外,支持缺失值的矩阵运算也会产生不一致的结果。线性回归线
28、性回归IML模块模块 解方程组 例18.13线性解方程组。用符号表示为:Ax=c解方程组程序:prociml;a=3-12,2-23,41-4;c=8,2,9;x=inv(a)*c;printacx;quit;run;ACX3-12832-232541-492结果:线性回归线性回归IML模块程序模块程序 例18.14线性回归IML模块程序。prociml;x=111,124,139,1416,1525;y=1,5,9,23,36;b=inv(t(x)*x)*t(x)*y;yhat=x*b;r=y-yhat;sse=ssq(r);dfe=nrow(x)-ncol(x);mse=sse/dfe;s
29、tartregress;/*定义模块开始*/xpxi=inv(t(x)*x);/*矩阵XX的逆*/beta=xpxi*(t(x)*y);/*参数估计*/yhat=x*beta;/*预测值*/resid=y-yhat;/*残差*/sse=ssq(resid);/*SSE*/n=nrow(x);/*观测值数*/dfe=nrow(x)-ncol(x);/*误差自由度DF*/mse=sse/dfe;/*MSE*/cssy=ssq(y-sum(y)/n);/*校正平方和*/rsquare=(cssy-sse)/cssy;/*RSQUARE*/print,RegressionResults,ssedfem
30、sersquare;stdb=sqrt(vecdiag(xpxi)*mse);/*参数估计的标准差*/t=beta/stdb;/*参数的t检验*/prob=1-probf(t#t,1,dfe);/*p-值*/print,ParameterEstimates,betastdbtprob;print,yyhatresid;finishregress;/*模块结束*/resetnoprint;runregress;/*执行REGRESS模块*/resetprint;/*打开自动打印*/covb=xpxi*mse;/*参数估计协方差阵*/s=1/sqrt(vecdiag(covb);corrb=dia
31、g(s)*covb*diag(s);/*参数估计的相关系数*/x1=1,2,3,4,5;/*矩阵X的第二列*/x=orpol(x1,2);/*产生正交多项式*/resetnoprint;/*关闭自动打印*/runregress;/*运行REGRESS*/resetprint;covb=xpxi*mse;s=1/sqrt(vecdiag(covb);corrb=diag(s)*covb*diag(s);resetfuzz;corrb=diag(s)*covb*diag(s);矩阵操作矩阵操作 v 输入数据创建矩阵标识v 使用赋值语句创建矩阵v 使用矩阵表达式v 利用行列标展现矩阵v 缺失值运算举例输入数据创建矩阵标识输入数据创建矩阵标识 SAS/IML中可以使用多种方式输入数据创建矩阵标识。创建标量矩阵标识例18.16创建标量矩阵例。prociml;x=12;y=12.34;z=.;a=Hello;b=Hithere;printxyzab;XYZAB1212.34.HelloHithere创建多元素矩阵创建多元素矩阵时,用括号把元素括起来,用逗号(,)把行分开。例18.17创建多元素矩阵例。resetprint;coffee=42232,33121,21021,54434;names=Jenny,Linda,Jim,Samuel;printcoffeerowname=names;