文章目录

  • 前言
  • 一、使用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语言相关推荐

  1. PowerBuilder学习笔记(2)PB与SQL语言

    PowerBuilder学习笔记(2)PB与SQL语言 一.在PowerScript语言中使用SQL语句的注意点 PowerScript支持标准嵌入式SQL语句以及动态SQL语句.     可以使用数 ...

  2. java sql封装,在Java系统中封装SQL语言的处理方法及系统的制作方法

    在Java系统中封装SQL语言的处理方法及系统的制作方法[ 技术领域: ][0001]本发明涉及计算机数据处理 技术领域: ,特别是涉及一种在Java系统中封装SQL语言的处理方法及系统.[ 背景技术 ...

  3. oracle中值集限定词为灰色,《Oracle从入门到精通》读书笔记第四章 SQL语言基础之一...

    4.1 SQL语言概述 4.1.1 SQL语言的特点 1.集合性 2.统一性 3.易于移植性 4.1.2 SQL语言的分类 1.数据查询语言(DQL)- select语句,查询数据 2.数据操纵语言( ...

  4. 在Excel中使用SQL语言

    在学会VS操作MySQL数据库后,相信很多人都会想说试一试用VS来操作Excel,毕竟Excel也是一个数据库而且更常用,更方便.确实,这是可以实现的,这里有参考的网站,亲测可用,所有这里就不多做解释 ...

  5. VB中的SQL语言——增、删、改、查

    结构化查询语言简称SQL,SQL是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系统.SQL语言主要有四个部分:数据定义语言.数据操纵语言.嵌入式SQL语言的使用规定.数据控 ...

  6. 在EXCEL中使用SQL语言对工作表进行操作

    选中第一份表格右键,选择定义名,第二份表也如此. 选择菜单中的"数据",再选"其他来源",再选最后一个,从MICROSOFT QUERY 再在弹出的窗口选择EX ...

  7. 如何在Excel中使用SQL语言?

    如何在 Excel 中获取外部数据源? 使用 SQL 查询数据,首先需要数据源.如果我们用 Excel 来呈现这些数据的话,就需要先从外部导入数据源.这里介绍两种直接导入的方式: 通过 OLE DB ...

  8. 《Oracle从入门到精通》读书笔记第四章 SQL语言基础之二

    4.7 事务处理 4.7.1 事务概述 事务的4种属性:acid (1)原子性(atomic):事务是一个整体的工作单元,要么全部执行,要么全部取消. (2)一致性(consistency):所有的数 ...

  9. 数据库工作笔记003---在Centos中导入sql文件的方法

    JAVA技术交流QQ群:170933152 在数据中心部署项目时候用到了,记录一下.... 利用mysql -u root -p进入mysql数据库 对于文件的导入,在Centos下里面的是首先要新建 ...

  10. oracle DCL包括,ORACLE笔记(6)SQL 语言之DCL语句

    DCL  data control language  主要用来授予或回收访问数据库的某种特权,控制数据库操作事务发生的时间及效果,对数据库进行监视等: 一,GRANT  语句; 赋予用户权限 常用数 ...

最新文章

  1. 【错误记录】PyCharm 运行 Python 程序报错 ( PEP 8: E402 module level import not at top of file )
  2. Python直接赋值,浅拷贝和深度拷贝
  3. opencv鼠标操作,画矩形
  4. fzu - 1752 Problem 1752 A^B mod C
  5. 变分法理解2——基本方法
  6. 【Oracle 数据迁移】环境oracle 11gR2,exp无法导出空表的表结构【转载】
  7. MySQL(11)--- 删除数据表
  8. 传网易云音乐高管变动:市场副总裁李茵离职 CEO被降权
  9. Python模拟浏览器向 CSDN发送POST请求的方法
  10. 浅谈Vue中的虚拟DOM
  11. 2.SDK目录结构和adb工具及命令介绍
  12. php程序阻塞与非阻塞的区别,完美起航
  13. Websocket Session 共享解决
  14. Java文件快速copy复制
  15. K210学习笔记——语音识别
  16. Mac打开终端自动运行命令
  17. 【云原生】理解k8s中的Pod和容器设计模式
  18. 词法分析器--简易版
  19. 火影忍者服务器维护时间,1月4日停机更新公告
  20. html5定义页脚的标签,HTML中footer标签的使用方法

热门文章

  1. 全国750所高校(50所985/211)501个专业的毕业生在同一家公司搞事情
  2. OS X系统U盘安装的问题
  3. Ozone SCM HA设计浅谈
  4. CMM,CMMI 软件全面质量管理的思想体系
  5. android自动开关机软件,AutoOff(定时关机软件)
  6. 记事本如何运行python代码_记事本写代码怎么运行
  7. 今天分享的案例是关于某电商店铺的年终销售业绩
  8. 汽车电子测试系统搭建
  9. 生活广场远程预付费电能管理系统的设计与应用
  10. 重庆铜梁中学空调计量项目远程预付费电能管理系统的设计与应用