17.-SAS-SQL语言

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Slide1SASSQL过程简介Slide21.概述SQL(StructuredQueryLanguage)•结构化查询语言•用于查询和更新数据的标准语言•功能强大SASSQL过程(PROCSQL)•在SAS系统中实现SQL功能•查询数据、产生汇总报表•合并数据•建立表、视图、索引•编辑、更新数据•SQL中的“表”可对应为SAS的数据集,“行”对应数据集的“观测”,“列”对应“变量”Slide3PROCSQL特点在SQL中子句内的项目用逗号(,)分开SELECT语句用于查询数据,也自动输出数据,除非规定了NOPRINT选项在SQL过程中使用的SAS数据集不需要事先排序提交SQL语句时,就可以执行,不需要规定RUN语句提交SQL过程步后,SQL一直处于运行状态,可继续提交其它SQL语句,直至提交另一个程序或QUIT语句Slide42.PROCSQL语句语句功能PROCSQLoption(s);创建修改查询更新数据ALTERTABLE……;修改增加删除列SELECT……FROM……;选择列和行UPDATE……SET……;修改值CREATE……;创建表、视图或索引DROP……;删除表、视图或索引INSERTINTO……;增加行DELETEFROM……;删除行DESCRIBE……;显示表或视图的定义RESEToption(s);重置该过程选项VALIDATE……;语法检查而不执行QUIT;终止SQL运行Slide53.SELECT语句基本语法•SELECT…FROM…为必须项SELECTDISTINCTobject-item-1,…/*指定查询列*/INTOmacro-variable1,…/*存入宏变量*/FROMfrom-list/*被查询的表*/WHEREsql-expression/*查询的条件*/GROUPBYgroup-by-item-1,…/*分组查询*/HAVINGsql-expression/*产生分组子数据集*/ORDERBYorder-by-item1,…;/*查询结果排序*/Slide6①SELECTDISTINCTobject-item-1,object-item-2,…DISTINCT:剔除重复的查询结果(行)object-item(查询对象)为下列之一•星号(*):表示选择所有的列•列名:表示选择指定的列•表名.*或表别名.*:表示选择指定表的所有列•视图名.*或视图别名.*:表示选择指定视图的所有列•sql-expression或case-expression:选择表达式产生的列Slide7sql-expression和case-expressionsql-expression(可实现计算等)•类似于数据步的表达式,由运算对象和运算符构成•运算对象包括:常量、列名、case-expression、支持的SAS函数、汇总函数、query-expression等•运算符号包括:()+-*/**=^=||&|^INLIKE等case-expression(可实现条件处理)•返回一个sql-expression,可产生一个值•CASEcase-operandWHENwhen-conditionTHENresult-expressionWHENwhen-conditionTHENresult-expression…ELSEresult-expressionENDSlide8SQL常用汇总函数•MEAN或AVG:均值•COUNT:非缺失值个数•MAX:最大值•MIN:最小值•NMISS:缺失值个数•STD:标准差•SUM:求和•VAR:方差Slide9示例简单查询:显示表中所有数据procsql;select*fromsashelp.class;quit;简单查询:指定列名,可调整顺序procsql;selectname,age,sexfromsashelp.class;quit;Slide10示例—复杂一点的查询例中,max(age)、weight/height为sql-expressioncase…end为case-expression,实现条件产生新列关键字as为表达式返回值新定义列名,如maxage,hgtcat,ratio_whlabel=、format=为新列指定标签及输出格式From子句指定要查询的数据表procsql;selectname,sex,max(age)asmaxage,height,casewhenheight68thenHighwhenheight52thenShortelseOK.endashgtcat,weight/heightasratio_whlabel=体重身高比format=4.2fromsashelp.class;quit;Slide11查询结果Slide12②WHEREsql-expression根据指定的条件输出查询子集条件中不能使用仅有一列的汇总函数例如,如下用法不正确Wheremax(age)15;下列用法则正确,Wheremax(age1,age2)15;/*此时max为SAS函数*/whereage15;whereage15andsex=“F”;procsql;selectname,age,sex,heightfromsashelp.classwhereage14andsex=M;quit;Slide13②WHEREsql-expression操作符说明举例=,,,=,=,^=关系判断X=5AND,NOT,OR逻辑判断x3ory2notbetween…and…确定数值范围xbetween1and3notcontains或?是否包含xcontains‘BB’notin是否为集合中元素xin(‘A’,’C’,’F’)isnotnull|missing是否为缺失值xismissingxisnotmissingnotlike模式匹配:_:匹配单个字符%:匹配多个字符xlike‘S_S%’可匹配:SAS,SaS,SUSAN常用操作符Slide14③GROUPBYgroup-by-item-1,group-by-item-2,…指定如何分组汇总数据通常指定的是列名procsql;selectsex,mean(height)asmhgtlabel=身高均数,std(height)asstd_hgtlabel=身高标准差,mean(weight)asmwgtlabel=体重均数,std(weight)asstd_wgtlabel=体重标准差fromsashelp.classgroupbysex;quit;Slide15④HAVINGsql-expression根据指定条件输出分组数据子集通常跟汇总函数和GROUPBY子句同时使用procsql;selectage,mean(height)asmhgtlabel=身高均数,std(height)asstd_hgtlabel=身高标准差,mean(weight)asmwgtlabel=体重均数,std(weight)asstd_wgtlabel=体重标准差fromsashelp.classgroupbyagehavingmean(height)62;quit;Slide16⑤ORDERBYorder-by-item-1ASC|DESC,…;指定列,输出结果按其顺序排列ASC升序(默认);DESC降序procsql;selectage,mean(height)asmhgtlabel=身高均数,std(height)asstd_hgtlabel=身高标准差,mean(weight)asmwgtlabel=体重均数,std(weight)asstd_wgtlabel=体重标准差fromsashelp.classgroupbyagehavingmean(height)62orderbyageDESC;quit;Slide17⑥FROMfrom-list;指定要查询的数据来源from-list可以是下列之一•表名•视图名•联接的表•内联视图(in-lineview),即(query-expression),嵌套查询•DBMS表(CONNECTIONTO)简单的方式是从一个表或视图中查询不同指定可产生复杂的查询Slide184.多表查询(JOIN联接)查询的数据可来自多个表,最多可达256张表表与表之间以逗号(,)分隔表和表之间的联接•表可以与自己或其它表联接•联接方式有以下几种•Innerjoin(内联接)•Outerjoin(外联接)•Crossjoin(交叉联接)•Unionjoin(合并联接)•Naturaljoin(自然联接)Slide19(1)迪卡儿积(Cartesianproduct)产生行的全交叉组合,为所有联接表格行数的乘积datalefttab;inputContinent$Export$Country$;datalines;NAwheatCanadaEURcornFranceEURriceItalyAFRoilEgypt;datarighttab;inputContinent$Export$Country$;datalines;NAsugarUSAEURcornSpainASIAriceVietnam;procsql;title'TheCartesianProduct';select*fromlefttab,righttab;quit;Slide20输出结果—迪卡儿积ContinentExportCountryContinentExportCountryNAwheatCanadaNAsugarUSAEURcornFranceNAsugarUSAEURriceItalyNAsugarUSAAFRoilEgyptNAsugarUSANAwheatCanadaEURcornSpainEURcornFranceEURcornSpainEURriceItalyEURcornSpainAFRoilEgyptEURcornSpainNAwheatCanadaASIAriceVietnamEURcornFranceASIAriceVietnamEURriceItalyASIAriceVietnamAFRoilEgyptASIAriceVietnam第一张表的所有观测依次与第二张表的观测组合,形成4*3行Slide21(2)Innerjoin(内联接)使用方式•在迪卡儿积基础上使用where子句选择等联接•使用InnerJoin…On子句,二者等价procsql;title'Innerjoin';select*fromlefttabasa,righttabasbwherea.continent=b.continent;quit;procsql;title'Innerjoin2';select*fromlefttabasainnerjoinrighttabasbona.continent=b.continent;quit;Slide22(3)Outerjoin(外联接)外联接是在内联接的基础上增加未在另一表中匹配的行包括三种方式及语法Leftjoin(左联接)TableALEFTJOINTableBON…Rightjoin(右联接)TableARIGHTJOINTableBON…Fulljoin(全联接)TableAFULLJOINTableBON…Slide23(3)Outerjoin(外联接)--LEFTJOIN只保留在左侧表中匹配的及未匹配的行procsql;title'LEFTJOIN';select*fromlefttabasaLEFTJOINrighttabasbONa.continent=b.continent;quit;Slide24(3)Outerjoin(外联接)--RIGHTJOIN

1 / 43
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功