第5章PROCSQL简介学习目标了解SQL过程在SAS系统中的作用;掌握SQL过程语句以及格式;熟练运用SQL过程语句进行实例操作;SQL过程概述本节描述实现结构查询语言(SQL)以及如何在SAS系统中工作的概述。SQL是一个标准化的广泛使用的语言,它可以检索和更新关系表格和数据库中的数据。在SAS系统中使用SQL过程,仅需要理解表格及其操作即可。在SQL中常将它面对的数据文件称为表。比较SQL术语和SAS术语SQL术语SAS术语数据处理术语表SAS数据文件文件行观测记录列变量字段SQL过程有助于数据的管理可以用SELECT语句去检索和操作存于表中、视图里和由PROCSQL接收的数据(由PROCSQL生成的SAS数据文件在本章中称为表)。可以用VALIDATE语句去检查SELECT语句句法的准确性而无须执行它。还可以用DESCRIBE语句简单地显示一个PROCSQL视图定义。可以用CREATE语句在表的列中生成表格、视窗、索引;这些表和视窗可永久地存贮在SAS数据库内,而且使用逻辑库名调用它。可以用DROP语句删除表格、视窗和索引。SQL过程有助于数据的管理可以用UPDATE语句增加或修改在表格的列里的数值,或者用INSERT和DELETE语句插于或删除行。可以通过用ALTER语句增加、修改、删去列来修改表格。可以使用许多RESET语句的增加、改变或删除的选项。生成报告。可以拼接不同类型的数据表为单一的数据表。SQL语句格式SQL过程包含下面几个语句,其中的PROCSQL和RESET这两个语句可以没有选项,如下:Procsqloptions;Altertablestatement-1;Createstatement-2;Deletestatement-3;Describestatement-4;Dropstatement-5;Insertstatement-6;Resetstatement-7;Selectstatement-8;SQL过程特点由于SQL过程实现结构化查询语言,它在运行时与其它过程会有所不同,主要为:SQL过程的语句被分成一些子句。例如SELECT语句包含SELECT和FROM子句,在SQL中子句内的项目用逗号分开,而不像在SAS系统中用空格分开。SELECT语句用于查询数据,也自动输出数据,除非规定了NOPRINT选项。SQL过程特点SELECT和CREATEVIEW语句每个都可以包含一个ORDERBY字句以便对数据进行排序,所以PROCSQL程序中不需要使用SORT过程。在SQL过程中使用的SAS数据集不需要按某个变量事先排序。提交SQL语句时,就可以执行,不需要规定RUN语句。如果在PROCSQL语句后跟了RUN语句,那么SAS系统会忽略RUN语句,而且像通常情况一样提交这些语句。提交SQL过程步后,程序编辑窗口的状态行一直显示‘PROCSQLrunning’直至提交另一个程序或QUIT语句。PROCSQL和RESET语句下面这些选项可以在PROCSQL语句或RESET语句中出现。这些语句在PROCSQL语句中使用时,它们说明该选项的初始状态。使用RESET语句可以在PROCSQL语句之前增加、移动或改变选项。一个选项被复位之前一直保持有效。PROCSQL和RESET语句ERRORSTOP|NOERRORSTOP:如果遇到出错情况,规定SAS系统是否停止处理,SAS系统会一直检查PROCSQL的语句准确性,如果没有出错则执行该SQL语句。EXEC|NOEXEC:规定一个语句在检查其正确性后是否被执行。FEEDBACK|NOFEEDBACK:规定在扩展视图索引或在查询语句中作变换后,是否显示这个查询。PRINT|NOPRINT:规定SELECT语句的结果是否在SAS的OUTPUT窗口打印。PRINT选项是缺省值。DOUBLE|NODOUBLE:规定是否隔行输出。SQL过程和SAS数据集选项SQL过程可应用任何一个SAS数据集选项,例如把选项KEEP=和DROP=应用于表或视图中。在SQL过程中,SAS数据集选项被括在括号里并紧跟在表名或视图名的后面。不能将SAS数据集选项与PROCSQL视图名字联系到一起,因为选项仅对视图的基本表有效。例如,创建PROCSQL视图时,不能将SAS数据集选项列在视图名字后面。ALTER语句ALTER语句向已存在的表中加入列或从表中删除列。它也用于改变一个已存在的表中列的属性。当ALTER语句向表中加入一列时,它将该列在表中所有行的值初始化为缺失值。然后用UPDATE语句向新的列中加入值。如果某列已经在表中,那么可以用MODIFY字句改变这些列的属性。若想从一个表中删掉一列及其所有值,在DROP子句中指定列的名字。如果删掉了一列,一定要把其它语句中涉及到该列的名字也删掉。CREATE语句CREATE语句能够根据表或其它视图,及表中列的索引创建表或视图。DELETE语句DELETE语句从表或DBMS表中删去WHERE表达式为真的所有行,这个表或DBMS表是在FROM子句中规定的表。此语句不能引用其FROM子句中的PROCSQL视图。如果没有规定WHERE子句,DELETE语句就将表中的所有行都删掉。SELECT语句在查询表达式中最常用的是SELECT语句,其可以展示查询结果的数据,可让数据以一定的格式显示,将报告在OUTPUT窗口输出。SELECT语句的一般形式为:Selectcol1,col2,…Fromtable附加的从句;其中,col1,…指明选择的列,若要选择所有的列可用符号‘*’;from表是设定要查询其行列的数据表。在过程SQL的SELECT语句中附加WHERE从句,可以对表中的观测进行选择。在SELECT语句中还可以使用ORDER从句将显示的数据按选定的变量的值排序。在SELECT从句中也可以用选项FORMAT=对选择的数据设定显示时用的格式。本章小节第一节介绍了SQL过程的特点以及SQL过程在数据管理方面的作用。使用SQL过程可以读入、展示和加工SAS数据文件;在表中增加和修改数据值;增加、修改和删除表的列;创建表;生成报告;而且可以拼接不同类型的数据表为单一的数据表。SQL是一种模块类型的语言,在这种语言中,语句由更小的分量构造块组成。通过第一节的学习了解SQL过程及其作用。本章小节简单地介绍SQL过程的特点及其与其它过程的区别,详细阐述了SQL过程所包含的各语句及其作用,包括PROCSQL和RESET语句、SAS数据集选项、ALTER语句、CREATE语句、DELETE语句、SELECT语句。本章小节最后,通过具体的10个实例操作讲解SQL语句的应用,帮助大家掌握SQL过程及其语句的应用。大家需要重点掌握最后两个实例,也就是数据集的匹配并接,尤其是3个及以上数据集(含有不同的匹配字段)的串接。熟悉这些实例操作将有助于我们深刻体会SQL过程,并通过上机操作逐渐掌握SQL的编程操作。