SAS中的SQL语句完全教程之三.docx_第1页
SAS中的SQL语句完全教程之三.docx_第2页
SAS中的SQL语句完全教程之三.docx_第3页
SAS中的SQL语句完全教程之三.docx_第4页
SAS中的SQL语句完全教程之三.docx_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SAS中的SQL语句完全教程之三:SQL过程步的其它特征(转)2012年06月14日 SAS学习, 统计学习 暂无评论 SAS中的SQL语句完全教程之三:SQL过程步的其它特征估计最近的一个数据分析要用到SQL,因此特地的翻了翻很久没看的SQL,未避免做重复无用的工作,在度娘上搜了搜,居然发现了一个跟我看同一本书的网友,讲解的还不错,因此果断的转了过来!原作者地址:/s/blog_5d3b177c0100cn8v.html前面两部分内容都比较简单,本节内容才是本系列要介绍的重点。不过这里装的内容都是点到即止,如果以后有时间,会进行更详细地讲解。1 SQL过程步选项SQL过程步选项的作用主要是可以从更细节的方式去控制SQL过程步,并且可以在不执行过程的情况下对程序进行测试等。下面介绍一下列出来的选项,这些选项大多经常用到,更多的选项可以参考SAS帮助。INOBS:进行一个查询时,对每个源数据表进行N行限制,仅对这N行的数据进行查询。OUTOBS:指定查询输出结果的观测数LOOPS:指定SQL过程步内循环的次数(此选项我用得比较少,谁明白的可以讲一下,多谢)NOPROMPT和PROMPT:修改上述三个选项的效果,从而让你选择是否继续或停止选项的效果。PRINT和NOPRINT:控制是否打印选择的数据结果NONUMBER和NUMBER:控制是否在第一列打印观测值编号DOUBLE和NOBOUBLE:输入报表是否隔行显示NOFLOW和FLOW和FLOW=n和FLOW=n m:指定列宽,n指定列宽,m指定行宽?1.1 double选项proc sql double;select flight,datefrom MarchUNIONselect flight,datefrom Delay;quit;1.2 inobs选项注意:这里inobs选项只读取每个源表前10条数据进行后续的操作,如下面的日志所示。两个表都只读取10条数据进行关联,最后得到7条关联好的数据。237 proc sql inobs=10;238 create table tmp as239 select a.*,b.*240 from March a,Delay b241 where a.flight=b.flight and a.date=b.date;WARNING:变量“flight”已经存在于文件WORK.TMP中。WARNING:变量“date”已经存在于文件WORK.TMP中。WARNING:变量“orig”已经存在于文件WORK.TMP中。WARNING:变量“dest”已经存在于文件WORK.TMP中。WARNING: Only 10 records were read from WORK.DELAY(别名=B)由于INOBS=选项。WARNING: Only 10 records were read from WORK.MARCH(别名=A)由于INOBS=选项。NOTE:表WORK.TMP创建完成,有7行,11列。1.3 outobs选项这个选项的功能与inobs相似,不同的是,这个选项指定结果的观测值数量,而不是读取源表的数量,这在我们控制输出结果的数据量时非常有用。243 proc sql outobs=10;244 create table tmp1 as245 select a.*,b.*246 from March a,Delay b247 where a.flight=b.flight and a.date=b.date;WARNING:变量“flight”已经存在于文件WORK.TMP1中。WARNING:变量“date”已经存在于文件WORK.TMP1中。WARNING:变量“orig”已经存在于文件WORK.TMP1中。WARNING:变量“dest”已经存在于文件WORK.TMP1中。WARNING:语句由于OUTOBS=10选项而过早终止。NOTE:表WORK.TMP1创建完成,有10行,11列。1.4 prompt选项这里prompt选项,可以让你选择是否还是按照原来的设置进行动作,或者继续操作。如下面的日志所以,如果直接选择停止,则得到1.2的结果,如果一直按继续,则得到如下结果:255 proc sql inobs=10 prompt;256 create table tmp3 as257 select a.*,b.*258 from March a,Delay b259 where a.flight=b.flight and a.date=b.date;WARNING:变量“flight”已经存在于文件WORK.TMP3中。WARNING:变量“date”已经存在于文件WORK.TMP3中。WARNING:变量“orig”已经存在于文件WORK.TMP3中。WARNING:变量“dest”已经存在于文件WORK.TMP3中。NOTE:表WORK.TMP3创建完成,有19行,11列。1.5 number选项proc sql outobs=4 number;select * from March;quit;1.6 reset选项对上述SQL语句加上reset选项,使其不输出序号proc sql outobs=4 number;reset nonumber;select * from March;quit;2 DICTIONARY2.1 DICTIONARY介绍DICTIONARY可以得到很多SAS文件和会话等很多的元数据,包括SAS文件,外部文件,系统选项、宏、标题、脚注等。DICTIONARY是在初始化时就创建,自动更新,并只允许读取操作,故不能修改。下面列举一下SAS中DICTIONARY所包含的表:SAS V8 DICTIONARY所包含的表:CATALOGS:SAS目录的信息COLUMNS:SAS变量和列的信息EXTFILES:外部数据信息INDEXES:参与索引的列的信息MACROS:宏相关信息MEMBERS:所有数据类型(表、视图、目录等)的信息OPTIONS:当前会话选项STYLES:ODS的样式信息TABLES:表和数据集信息TITLES:标题和脚注信息VIEWS:视图信息SAS V9 DICTIONARY所包含的新的表:CHECK_CONSTRAINTS:CHECK约束信息CONSTRAINT_COLUMN_USAGE:约束列使用信息CONSTRAINT_TABLE_USAGE:约束表使用DICTIONARIES:DICTIONARY所有表及其列ENGINES:可用的引擎FORMATS:可用的格式GOPTIONS:SAS/GRAPH选项LIBNAMES:LIBNAME信息REFERENTIAL_CONSTRAINTS:相关约束REMEMBER:已记录的信息TABLE_CONSTRAINTS:表约束2.2查看2.1中各表内容查看各表的结构,以查看dictionary.tables为例:proc sql;describe table dictionary.tables;quit;这里可以从日志里看到表dictionary.tables的结构。要查看这个表的数据,可以通过以下语句实现,这里我们只输出前10条数据proc sql outobs=10;select * from dictionary.tables;quit;2.3使用DICTIONARY的信息查看SASHELP库里的文件信息:proc sql;options nolabel nocenter;select memname,nobs,nvar,crdatefrom dictionary.tableswhere libname=SASHELP;quit;注意,这里的库名都是大写。查看SASHELP库里有列名为tabname的所有表:proc sql;options nolabel nocenter;select memnamefrom dictionary.columnswhere libname=SASHELP and name=tabname;quit;注意这里是用dictionary.columns的信息用SASHELP.VMEMBER来撮DICTIONARY.MEMBERS的信息:proc tabulate data=sashelp.vmember format=8.;class libname memtype;keylabel N= ;table libname,memtype/rts=10 misstext=None;run;DICTIONARY是一个非常有用的信息库,本文主要是介绍一下其基本功能,以后有时间的话会对其进行详细介绍。3 SQL过程步与宏语言的交互SQL过程步可以创建SAS宏变量,也可以生成一些自动的宏变量,从其中可以更好地理解SQL处理过程。3.1在SQL过程中使用宏变量%let outputnumber=10;proc sql outobs=&outputnumber;options nolabel nocenter;select * from dictionary.tableswhere libname=SASHELP;quit;这个很简单,就不讲了,下面讲一下本节的重点。3.2创建宏变量SQL过程步可以通过into语句来创建或更新宏变量,主要有三种方式。这里要注意的是,在使用into语句创建宏变量时,我们是不能在create table或create view语句里使用的。当我们不需要输出结果时,可以用noprint选项。3.2.1结果只有一行Select col1,col2,Into :mvar1,:mvar2,From 例:proc sql noprint;select avg(sales),min(sales),max(sales)into :mean, :min, :maxfrom sashelp.shoes;quit;%put &mean &min &max;这种方式适合输出结果只有一行的情况。3.2.2提取前N行的值Select a,b,Into :a1-:an, :b1-:bnFrom 这种方法前前N行的查询结果输入到一系列的N个宏变量中。例:proc sql noprint;select Region,count(*) as frequencyinto :Region1-:Region3, :freq1-:freq3from sashelp.shoesgroup by Region;quit;%put &Region1 &Region2 &Region3;%put &freq1 &freq2 &freq3;3.2.3提取所有数据Select col1,col2,Into :macrovar1, :macrovar2,Separated by delimiterFrom 这里将每列的所有数据都输出到一个宏变量中,并以指定的分隔符分开。例:proc sql noprint;select distinct Regioninto :RegionAllseparated by ,from sashelp.shoes;quit;%put &RegionAll;3.3 SQL过程步自动产生的宏变量SQLOBS:记录输出结果或被删除的观测值个数SQLRC:包含每个SQL语句的返回代码SQLOOPS:包含SQL过程步内循环的次数例:proc sql;select *from sashelp.shoes;quit;%put &SQLOBS;得到输出观测的条数。4程序测试与效率这里主要介绍几个SQL过程步的选项:Exec/Noexec:控制SQL语句是否执行Nostimer/Stimer:在SAS日志中报告每个SQL语句的效率统计数据Noerrorstop/Errorstop:批处理时控制当有错误发生时,是否要检查语法例:noexe与feedback66 proc sql feedback noexec;67 select * from sashelp.shoes;NOTE: Statement transforms to:select SHOES.Region, SHOES.Product, SHOES.Subsidiary, SHOES.Stores, SHOES.Sales, SHOES.In

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论