SAS笔记#SAS中的SQL语言
文章目录
- 前言
- 一、使用SQL检索数据
- 1.SQL的基本结构
- 2.列操作
- 2.1查询某列的值(select)
- 2.2列值更新(update)
- 3.行操作
- 3.1.distinct关键字
- 3.2.where从句
- 3.3.order从句
- 3.4.group by从句
- 3.5.having从句
- 3.6.insert into 插入行
- 3.7.delete 删除行
- 二、使用SQL进行数据表合并
- 1.横向合并
- 1.1.内连接
- 1.2.外连接
- 2.纵向合并
- 三、数据表的增删改
- 1.创建空表
- 2.删除表
- 3.修改表
- 总结
前言
SAS语言是支持SQL语言的,本文将介绍如何使用SAS SQL对数据进行检索,加工以及管理。
一、使用SQL检索数据
1.SQL的基本结构
proc sql;select 表1.字段名1,表1.字段名2,....from 表1<where><group by><order by>;
quit;
注:SAS中sql语句只有结束时的一个分号。
2.列操作
2.1查询某列的值(select)
实例代码:
proc sql number outobs=10;select cars.make,cars.model from sashelp.cars;
quit;
部分结果:
分析:select语句后面只选择了make和model字段,from后面表明了是从sashelp.cars表获取数据,因此该sql语句查询的结果只有sashelp.cars表中的make,model两个字段。
2.2列值更新(update)
updata语法:
/*使用where筛选条件*/
proc sql;update 表名set 字段名1=新值1,字段名2=新值2, ...<where>
quit;/*使用case筛选条件*/
proc sql;update 表名set 字段名1=casewhen 条件1 then 新值1when 条件2 then 新值2...end;
quit;
3.行操作
3.1.distinct关键字
对distinct后面所有的字段都会被去重处理,distinct使用结构:
select distinct 表名.列1, 表名.列2....
注:一个select语句中只能由一个distinct 。
实例代码:
proc sql number outobs=10;select cars.make,cars.model from sashelp.cars;
quit;
结果如下:
3.2.where从句
和Data步中where类似,来选择符合条件的行。
代码实例:
proc sql number;select cars.make,cars.model from sashelp.carswhere cars.make="Acura";
quit;
结果如下:
分析:查询了make字段为Acura的数据。
注:如果在查询时生成了新的字段,此时where不能直接对新的字段编写条件去查询,需要在新的字段前加关键字calculated来表明该列是新生成的。
这里的新列为tax,使用where从句时,对产生的新列没有进行说明系统会报错。
3.3.order从句
对所选择的列进行升序会降序,order的基本使用结构:
oeder by 列1<desc>,列2<desc>...
注:desc表明为降序,当字段后面啥也没有写时,系统默认为对字段进行升序操作。
示例:
3.4.group by从句
goup by类似于tabulate过程中的class,用来查看分组信息。
proc sql outobs=10;select cars.make,count(distinct model) as numfrom sashelp.carsgroup by make;
quit;
分析:对make进行分组,对每一个make中的model进行去重计数。
注:group by语句一般和汇总函数结合使用。
下面列举了一些常见的汇总函数及其含义
函数 | 含义 |
---|---|
max | 最大值 |
min | 最小值 |
avg | 平均值 |
count | 计数 |
nmiss | 缺失值个数 |
range | 最大值和最小值之差(极差) |
var | 方差 |
std | 标准差 |
sum | 求和 |
3.5.having从句
having从句和where从句一样,也是选择特定条件的行,having是对查询之后结果再进行一次条件筛选,往往用在group by后面,对分组之后的数据再进行条件筛选。
代码示例:
proc sql outobs=10;select cars.make,count(distinct model) as numfrom sashelp.carsgroup by make having num>10;
quit;
结果如下:
分析:该次查询生成了一个新列num,前面使用where时,对于新列需要用关键字calculated说明,而使用having时不需要说明,也侧面说明了having是对分组之后的数据进行的条件筛选,因为分组之后的数据中已经有num字段了,再进行having从句进行条件筛选不算是新的字段了。
3.6.insert into 插入行
insert into基本结构:
/* set插入 */
proc sql;insert into 表名set 字段名1=内容1字段名2=内容2...;
quit;/* values插入 */
proc sql;insert into 表名 (字段名1,字段名2, ...)values (内容1, 内容2, ...)...;
quit;
注:values后面的插入内容要与前面的字段对应。
实例代码:
proc sql;insert into new_classset name='A',sex='M',height=79,weight=100set name='B',sex='F',height=109,weight=120;
quit;
结果如下:
3.7.delete 删除行
delete基本用法:
proc sql;delete from 表名 <where 删除的条件>
quit;
二、使用SQL进行数据表合并
1.横向合并
1.1.内连接
对两个进行合并的表,根据连接条件,返回两个表中所有的匹配数据。
实例代码:
proc sql;select c.name, c.sex, c.age, c.height, cfit.weightfrom work.class as c, work.classfit as cfitwhere c.name=cfit.student_name;
quit;
结果:
1.2.外连接
外连接语法:
proc sql;select 列1, 列2...from 表A 连接方式 表B;
quit;
外连接的三种方式
连接条件 | 含义 |
---|---|
左连接(left join) | A left join B:AB都有的记录m和A除去m剩下的记录 |
右连接(right join) | A right join B:AB都有的记录m和B除去m剩下的记录 |
全连接(full join) | A full join B:AB都有的记录m和A除去m剩下的记录以及B除去m剩下的记录 |
2.纵向合并
语法:
proc sql;select * from 表A 连接方式 <all> <corr>select * from 表A;
quit;
连接方式:
连接方法 | 作用 |
---|---|
except | A except B:A中有并且A不在B中 |
intersect | A intersect B:A中有并且A在B中 |
union | A union B:A和B都有,A表会覆盖B表 |
outer union | A outer union B:根据字段名直接合并,两表之间不会覆盖 |
注:纵向合并时默认去重,如要不去重可使用all,同时合并时只需要两张表的字段数据类型相同即可合并,合并后的数据表的字段名默认以第一张数据表的字段名为准,如要以两张表相同字段名纵向合并可使用corr。all和corr可以同时使用。
以union为例:
三、数据表的增删改
1.创建空表
proc sql;
create 表名 (字段名1 数据类型1,字段名2 数据类型2,字段名3 数据类型3,...)
;
quit;
实例代码:
create table new_class(name char(12) label='姓名',sex char(4) label="性别",age num label="年龄",height num label="身高",weight num label="体重")
;
quit;
也可以使用like复制已存在的表的结构来创建空表,like的使用结构
proc sqlcreate table 空表名like 已存在的表名
quit;
创建一个和new_class一样的空表new_class1,代码如下:
proc sqlcreate table new_class1like new_class;
quit;
2.删除表
proc sql;drop table 表名;
quit;
3.修改表
proc sql;alter table 表名add 列1 数据类型,列2 数据类型 /*新增列*/drop 列1, 列2 /*删除列*/modify 列名 数据类型; /*修改列属性*/
quit;
如删除new_class中的age字段,添加adress地址字段,并将weight改为质量,代码如下:
proc sql;alter table new_classadd adress char(10) label="地址"drop agemodify weight num label='质量';
quit;
结果如下:
总结
本文主要介绍了在SAS中使用SQL语言,如何对数据表的创建,删除,修改,合并,以及如何对数据进行增删改查。
SAS笔记#SAS中的SQL语言相关推荐
- PowerBuilder学习笔记(2)PB与SQL语言
PowerBuilder学习笔记(2)PB与SQL语言 一.在PowerScript语言中使用SQL语句的注意点 PowerScript支持标准嵌入式SQL语句以及动态SQL语句. 可以使用数 ...
- java sql封装,在Java系统中封装SQL语言的处理方法及系统的制作方法
在Java系统中封装SQL语言的处理方法及系统的制作方法[ 技术领域: ][0001]本发明涉及计算机数据处理 技术领域: ,特别是涉及一种在Java系统中封装SQL语言的处理方法及系统.[ 背景技术 ...
- oracle中值集限定词为灰色,《Oracle从入门到精通》读书笔记第四章 SQL语言基础之一...
4.1 SQL语言概述 4.1.1 SQL语言的特点 1.集合性 2.统一性 3.易于移植性 4.1.2 SQL语言的分类 1.数据查询语言(DQL)- select语句,查询数据 2.数据操纵语言( ...
- 在Excel中使用SQL语言
在学会VS操作MySQL数据库后,相信很多人都会想说试一试用VS来操作Excel,毕竟Excel也是一个数据库而且更常用,更方便.确实,这是可以实现的,这里有参考的网站,亲测可用,所有这里就不多做解释 ...
- VB中的SQL语言——增、删、改、查
结构化查询语言简称SQL,SQL是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系统.SQL语言主要有四个部分:数据定义语言.数据操纵语言.嵌入式SQL语言的使用规定.数据控 ...
- 在EXCEL中使用SQL语言对工作表进行操作
选中第一份表格右键,选择定义名,第二份表也如此. 选择菜单中的"数据",再选"其他来源",再选最后一个,从MICROSOFT QUERY 再在弹出的窗口选择EX ...
- 如何在Excel中使用SQL语言?
如何在 Excel 中获取外部数据源? 使用 SQL 查询数据,首先需要数据源.如果我们用 Excel 来呈现这些数据的话,就需要先从外部导入数据源.这里介绍两种直接导入的方式: 通过 OLE DB ...
- 《Oracle从入门到精通》读书笔记第四章 SQL语言基础之二
4.7 事务处理 4.7.1 事务概述 事务的4种属性:acid (1)原子性(atomic):事务是一个整体的工作单元,要么全部执行,要么全部取消. (2)一致性(consistency):所有的数 ...
- 数据库工作笔记003---在Centos中导入sql文件的方法
JAVA技术交流QQ群:170933152 在数据中心部署项目时候用到了,记录一下.... 利用mysql -u root -p进入mysql数据库 对于文件的导入,在Centos下里面的是首先要新建 ...
- oracle DCL包括,ORACLE笔记(6)SQL 语言之DCL语句
DCL data control language 主要用来授予或回收访问数据库的某种特权,控制数据库操作事务发生的时间及效果,对数据库进行监视等: 一,GRANT 语句; 赋予用户权限 常用数 ...
最新文章
- 【错误记录】PyCharm 运行 Python 程序报错 ( PEP 8: E402 module level import not at top of file )
- Python直接赋值,浅拷贝和深度拷贝
- opencv鼠标操作,画矩形
- fzu - 1752 Problem 1752 A^B mod C
- 变分法理解2——基本方法
- 【Oracle 数据迁移】环境oracle 11gR2,exp无法导出空表的表结构【转载】
- MySQL(11)--- 删除数据表
- 传网易云音乐高管变动:市场副总裁李茵离职 CEO被降权
- Python模拟浏览器向 CSDN发送POST请求的方法
- 浅谈Vue中的虚拟DOM
- 2.SDK目录结构和adb工具及命令介绍
- php程序阻塞与非阻塞的区别,完美起航
- Websocket Session 共享解决
- Java文件快速copy复制
- K210学习笔记——语音识别
- Mac打开终端自动运行命令
- 【云原生】理解k8s中的Pod和容器设计模式
- 词法分析器--简易版
- 火影忍者服务器维护时间,1月4日停机更新公告
- html5定义页脚的标签,HTML中footer标签的使用方法