0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SAS:数据集的横向合并(二)

冬至子 来源:小高的SAS学习笔记 作者:小高笔记 2023-05-19 10:47 次阅读

前面我们介绍了在data step中用merge的方法可以对数据集横向合并,这节我们来讲讲在procedure过程步中用proc sql的方法对数据集进行横向连接,proc sql的功能十分强大,一般在data step中能实现的同样在proc sql中也可以实现,而且在很多时候, Proc步要更胜一筹。proc sql语句中的横向连接主要有左连接、右连接、内部连接、完全连接这几种情况。下面我将详细介绍:

一、最简单的join——笛卡尔积

不指定where选择子集,则会生成一个最基本的笛卡尔积,即包括两个表所有可能的join。

data one;

input x a$;

    cards;

1 a

2 b

4 d

;

run;

data two;

input x b$;

    cards;

2 x

3 y

5 v

;

run;

proc sql;

create table three1 as

        select *

              from one,two;

quit;

/ 结果如下: /

图片

有这个过程后,就能完全了解一对多,多对多,多对一连接后的结果了,反正全部都是先进行一次所有行的笛卡尔积的生成,然后再按条件进行筛选。

二、内连接

(1)内连接只会对两表中基于准则的行进行组合和显示。在内连接中,where从句是限制在笛卡尔输出集中显示的行的数量。

图片

proc sql;

select one.x, a, b

from one, two  

where one.x = two.x;

quit;

/ 结果如下: /

图片

(2)在标准内连接中,出现两个表都含有重复的值的情况,内连接会对所有满足条件的观测行进行一一对应的笛卡尔积

proc sql;

create table three3 as

       select *          

           from three, four  

               where three.x = four.x;

quit;

/ 结果如下: /

图片

三、外连接

外连接是内连接的一个augmentation,除了交的部分,还含有并的某些或全部

(1) 左连接(左表变量顺序保持不变 )

图片

左连接会将所有满足ON条件的行进行连接,并会额外加上左表中所有不满足条件的行。未满足条件的右表的行被置为缺失值。

proc sql;

create table three4 as

     select *         

         from one left join two  

            on one.x = two.x;

quit;

/ 结果如下: /

图片

(2)右连接(右表变量顺序保持不变 )

图片

右连接会将所有满足ON条件的行进行连接,并会额外加上左表中所有不满足条件的行。

proc sql;

create table three5 as

    select *         

        from one right join two  

            on one.x = two.x;

quit;

/ 结果如下: /

图片

(3)全连接

全连接会把所有满足和不满足条件的行全部列出来,如果要得出和merge一样的效果,需要加入coalesce函数

图片

COALESCE(argument-1<..., argument-n>) 这个函数也可以对left和right/join用,但是只能得出left或right的结果

例1:不使用coalesce

proc sql;

create table three6 as

      select *         

          from one full join two  

              on one.x = two.x;

quit;

/ 结果如下: /

图片

例2:使用coalesce

proc sql;

create table three7 as

        select coalesce(one.x,two.x) as x,a,b

              from one full join two

                    on one.x=two.x;

quit;

/ 结果如下: /

图片

四、Merge/Join的联系与区别

(1)一对一

data one;

input x a$;

cards;

1 a

2 b

4 d

;

run;

data two;

input x b$;

cards;

2 x

3 y

5 v

;

run;

data merged1;

merge one two;

     by x;

run;

图片

proc sql;

create table merged2 as

     select coalesce(one.x, two.x) as X, a, b

          from one full join two

               on one.x = two.x;

quit;

图片

当是处于一对一的情况时,merge a b;by x;相当于SQL的full join:即a full join b on a.x=b.x;

(2)一对多或多对一

data three;

input x a$;

     cards;

1 a1

1 a2

2 b1

4 d

;

run;

data four;

input x b$;

    cards;

2 x1

2 x2

2 x3

3 y

5 v

;

run;

data merged1;

merge three four;

    by x;

run;

/ 结果如下: /

图片

proc sql;

create table merged2 as

     select coalesce(three.x, four.x) as x, a, b

         from three full join four

              on three.x = four.x;

quit;

图片

当是处于一对多或多对一的情况时,merge a b;by x;相当于SQL的full join:即a full join b on a.x=b.x on a.x=b.x;

(3)多对多

data five;

input x a$;

    cards;

1 a1

1 a2

2 b1

2 b2

4 d

;

run;

data six;

input x b$;

    cards;

2 x1

2 x2

2 x3

3 y

5 v

;

run;

data merged1;

merge five four;

    by x;

run;

/ 结果如下: /

图片

proc sql;

create table merged2 as

      select coalesce(five.x, six.x) as x, a, b

            from five full join six

                 on five.x = six.x;

quit;

/ 结果如下: /

图片

当是多对多的情况时,merge a b;by x;与 SQL的full join会产生不同的结果。

**总结:

**

1.一对一或一对多(多对一)合并

(1)merge a b;by x;相当于SQL的full join:即a full join b on a.x=b.x;

(2)merge a(in=ina) b(in=inb);by x;if ina;相当于sql的左连接 a left join b on a.x=b.x;

(3)merge a(in=ina) b(in=inb);by x;if ina and inb;相当于SQL的内连接:a inner join b on a.x=b.x;

2.多对多合并

两者区别较大,merge只取A.x与B.x的并集,即AUB;而SQL则取两者的笛卡尔乘积数即A.x的数量*B.x的数量。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • SQL
    SQL
    +关注

    关注

    1

    文章

    759

    浏览量

    44062
收藏 人收藏

    评论

    相关推荐

    SAS走进企业级存储应用

    2005年第季度快速增长。2007年,SAS的市场份额预计会达到60%。富士通将提供小板型(2.5英寸)的硬盘驱动器和3.5英寸的硬盘驱动器来满足市场需求。 已实现的快速上市目标 20多年来
    发表于 11-13 21:58

    串行连接SCSI(SAS)技术开辟宽数据路径

      串行连接SCSI(SAS)技术开辟宽数据路径直到不久前,数据中心主要安装着使用光纤通道连接技术和并行SCSI接口的存储区域网。这类存储解决方案提供了高性能和可靠性,但费用高昂
    发表于 11-13 21:59

    SAS分区规范为所有SAS物理结构提供灵活高效的接入控制,其特性包括

    接入控制分区以将共享网络资源划分为不同的工作组 安全策略以限制不同组之间的访问 扩展器开关单点配置以及策略管理 后向兼容,并对现有SAS控制器、主机总线以及磁盘驱动器阵列的操作是透明的。PM8399
    发表于 06-02 09:31

    数据表文件读取及数组合并

    读取指定目录下的数据表文件,通过合并生成维数组,数据表文件中的行列数没有限制,数据自动对齐。
    发表于 10-14 19:03

    SAS固态硬盘存储技术

    数据,对密集数据随机访问无法带来质的提升, 工业级SAS固态硬盘底摆脱传统机械硬盘依靠硬盘电机高转速读取数据的极限,根本改变硬盘IO对整个服务器性能最大瓶颈。对搜索引擎服务器、在线游戏
    发表于 06-18 05:00

    SAS硬盘有什么特点?

    SCSI协议由于其深受信赖的可靠性和稳定的功能,20年来一直牢牢占据市场。3年前才推出的串行连接SCSI(SAS)延续了对SCSI的创新,具有全新水平的可扩展性、灵活性和经济有效性,为用户提供接入、数据传输和
    发表于 09-24 09:01

    SAS接口的设计

     SAS是新一代的SCSI技术,和现在流行的Serial ATA(SATA)硬盘相同,都是采用串行技术以获得更高的传输速度,并通过缩短连结线改善内部空间等。SAS是并行SCSI接口之后开发出的全新
    发表于 09-09 06:26

    结构粒化的数据合并

    为了研究实际中的数据合并问题,对各类数据信息给予了整体表示,使数据、关联关系和划分共同组成了关联组合结构,为
    发表于 01-17 10:50 0次下载

    一种大数据的密度统计合并算法

    data sets,简称DSML).该算法将数据点的每个特征看作一组独立随机变量,并根据独立有限差分不等式获得统计合并判定准则.首先,使用统计合并判定准则对Leaders算法做出改进,获得代表点
    发表于 01-21 11:45 1次下载

    5个必须知道的Pandas数据合并技巧

    concat是pandas中专门用于数据连接合并的函数,功能非常强大,支持纵向合并横向合并,默认情况下是纵向
    的头像 发表于 04-13 10:35 2288次阅读

    SAS:​数据横向合并(一)

    横向合并中,当两个或更多的SAS数据没有相同的变量时,此时合并
    的头像 发表于 05-19 10:44 4489次阅读
    <b class='flag-5'>SAS</b>:​<b class='flag-5'>数据</b><b class='flag-5'>集</b>的<b class='flag-5'>横向</b><b class='flag-5'>合并</b>(一)

    SAS数据的input输入方式

    SAS input输入方法用于读取原始数据。原始数据可以来自外部源或来自流数据
    的头像 发表于 05-19 14:50 2782次阅读
    ​<b class='flag-5'>SAS</b><b class='flag-5'>数据</b><b class='flag-5'>集</b>的input输入方式

    SAS-3成式磁盘阵列解决方案用户指南

    电子发烧友网站提供《SAS-3成式磁盘阵列解决方案用户指南.pdf》资料免费下载
    发表于 08-04 10:20 0次下载
    <b class='flag-5'>SAS</b>-3<b class='flag-5'>集</b>成式磁盘阵列解决方案用户指南

    SAS-2成RAID配置实用程序用户指南

    电子发烧友网站提供《SAS-2成RAID配置实用程序用户指南.pdf》资料免费下载
    发表于 08-10 16:25 0次下载
    <b class='flag-5'>SAS</b>-2<b class='flag-5'>集</b>成RAID配置实用程序用户指南

    Yonghong Desktop端Excel 数据的优化

    优化,提升Excel 数据使用体验。赶快来试试看有没有你想要的功能吧。 01 Excel 数据支持同时上传多个文件,多个文件可以“合并
    的头像 发表于 09-08 11:13 482次阅读
    Yonghong Desktop端Excel <b class='flag-5'>数据</b><b class='flag-5'>集</b>的优化