01
SQL语言简介
结构化查询语言SQL(Structured Query Language)是关系型数据库管理系统的标准语言。SAS系统也支持SQL语言。
SQL语言是一个强大的数据处理工具,它是DATA步的一种补充。相比DATA步,SQL语言更加直观、简洁,其常用术语和基本结构如下


SQL语言纵向查询(串接数据)
SQL语言纵向查询类型:

SQL语言纵向查询代码:

说明
CREATE从句创建新表(数据集);
SELECT从句选择要查看的列,不同列直接用逗号隔开;
FROM从句指定了操作的表(数据集);
WHERE从句选择满足条件的行。
02
实战
SQL纵向查询 建立串接数据集
Data a18_1; /*建立SAS临时数据集a18_1*/input id name:$ 9. height weight; /*输入不同类型和格式变量并定义输入格式*/format height 5.1 weight 4.1; /*设立变量height weight输出格式*/cards;1001 蔡晴 126.0 22.61003 范运霄 159.7 55.81002 高宇 162.8 60.21005 喻希山 144.0 32.3;Data a18_2; /*建立SAS临时数据集a18_2*/input id$ name:$ 9. ht;format ht 6.2;cards;1001 蔡晴 133.001006 徐军港 142.501003 范运霄 159.70;Data a18_3; /*建立SAS临时数据集a18_3*/input id name:$ 9. wt;format wt 6.3;cards;1004 安有文 36.0001001 蔡晴 37.0001005 喻希山 32.300;*建立转换变量类型的中间数据集;data a18_2_num; /*建立SAS临时数据集a18_2_num,是为转换数据集a16_2中变量字符格式设立的中间数据库*/set a18_2(rename=(id=id_num)); /*重命名变量id*/id=input(id_num,4.); /*将变量id_num转换为数值型变量id,长度为4*/drop id_num; /*弃除变量id_num*/run;
数据集a18_1界面图:

数据集a18_2界面图:

数据集a18_3界面图:

中间数据集a18_2_num界面图:

SQL语言纵向查询——串接数据集的差与交
*串接数据集 差接——except;proc sql;title "差接数据集";create table except as *建立差接数据集except*/select a.id,a.name from a18_1 as a *从数据集a18_1选择变量id name,设置数据集a18_1别名为a*/except *在a18_1基础上差接a18_2_num*/select b.id,b.name from a18_2_num as b *从数据集a18_2_num选择变量id name,设置数据集a18_2_num别名为b*/except *在a18_1与a18_2_num差接基础上,继续差接a18_3*/select c.id,c.name from a18_3 as c; *从数据集a18_3选择变量id name,设置数据集a18_3别名为c*/quit;*串接数据集 交接——intersect;proc sql;title "交接数据集";create table intersect asselect a.id,a.name from a18_1 as aintersect *在a18_1基础上交接a18_2_num*/select b.id,b.name from a18_2_num as bintersect *在a18_1与a18_2_num交接基础上,继续交接a18_3*/select c.id,c.name from a18_3 as c;quit;
差接数据集except 交接数据集intercept
打印输出:

SQL语言纵向查询——串接数据集的并
*串接数据集 并接——union;proc sql;title "并接数据集——height,排序并删除行重复值,仅保留公共列";create table union_ht as *建立并接数据集union_ht*/select * from a18_1 /*选择数据集a18_1所有变量*/union corr /*基于变量名并接数据集a18_1 a18_2_num,排序去重*/select * from a18_2_num(rename=(ht=height)); /*选择数据集a18_2_num所有变量并重命名变量ht为height*/quit;proc sql;title "并接数据集——height,直接串接,保留行重复值,仅保留公共列";create table union_ht_all asselect * from a18_1union corr all /*基于变量名并接数据集a18_1 a18_2_num,不排序不去重*/select * from a18_2_num(rename=(ht=height));quit;proc sql;title "并接数据集——weight,排序并删除行重复值,仅保留公共列";create table union_wt asselect * from a18_1union corrselect * from a18_3(rename=(wt=weight));quit;proc sql;title "并接数据集——weight,直接串接,保留行重复值,仅保留公共列";create table union_wt_all asselect * from a18_1union corr allselect * from a18_3(rename=(wt=weight));quit;
并接数据集union_ht union_ht_all输出:

并接数据集union_wt union_wt_all输出:

SQL语言纵向查询——串接数据集的外并
*串接数据集 外并接——outer union;proc sql;title "并接数据集——直接串接,保留所有行/列";create table outer_union as /*建立外并接数据集outer_union*/select * from a18_1 /*选择数据集a18_1所有变量*/outer union corr /*在a18_1基础上外并接a18_2_num*/select * from a18_2_num(rename=(ht=height)) /*选择数据集a18_2_num所有变量并重命名变量ht为height*/outer union corr /*在a18_1与a18_2_num外并接基础上,继续外并接a18_3*/select * from a18_3(rename=(wt=weight)); /*选择数据集a18_3所有变量并重命名变量wt为weight*/quit;
外并数据集outer_union输出:

03
小结
SQL纵向查询(串接)类型—四种,EXCEPT(差)、INTERSECT(交)、UNION(并)、外并(OUTER UNION)。前三种各数据集结构应一致,外并则在结构不一致时保留所有行/列,类似SET语句。
SQL纵向查询(串接)关键字—ALL/CORR,实战中可见,无ALL会先排序去重再串接,有则是直接串接;无CORR凭SELECT后变量顺序串接,有则合并同名变量。注意,ALL不能与OUTER UNION同时使用。
SQL纵向查询(串接)特点—SQL纵向查询最突出特色是不需要排序,二是匹配变量不需要同名,再就是可以在列方向上运用函数。当然,匹配变量类型仍然需要相同。
往期推荐 ·
SAS基础系列之一:定量资料的统计描述SAS入门系列之十五:单数据集的加工 字符函数(Ⅱ)


华中卫生统计
原创时间|每月首周、三周
长按二维码关注我们




