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

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

3天内不再提示

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

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

一、一对一合并数据集

1.具有不同变量的数据集

在横向合并中,当两个或更多的SAS数据集没有相同的变量时,此时合并数据集的变量均会展示在数据集中。

data one;

input week $10.;

cards;

Week1

Week2

Week3

Week4

Week5

;

run;

/ 结果如下: /

图片

data two;

input topic $10.;

cards;

Topic 1

Topic 2

Topic 3

Topic 4

Topic 5

;

run;

/ 结果如下: /

图片

data all1;

merge one two;

run;

/ 结果如下: /

图片

2.具有相同变量的数据集(不使用by语句)

当两个或更多的SAS数据集有相同的变量时,第 2 个数据集中的变量将覆盖第 1 个数据集中的相同变量。如果不想要被覆盖,则可以使用RENAME数据步骤选项来重新命名。

data three;

input ID $3. balance 4.;

cards;

001 102

005 89

002 231

004 147

003 192

;

run;

/ 结果如下: /

图片

data four;

input Name $ 1-15 @17 balance 4.;

cards;

John Smith 96

Ted Husion 80

Martha Chen 150

Sandy Lee 100

Paul Leny 192

Avery 200

;

run;

/ 结果如下: /

图片

data all2;

merge three four;

run;

/ 结果如下: /

图片

**3.具有相同变量的数据集(使用by语句) **

与by语句的合并允许根据by变量的值来匹配观测值。在合并之前,所有的输入数据集必须按照BY或KEY变量进行排序。

data five;

input ID $3. balance 4. zip 6.;

cards;

001 102 16431

005 89 46298

002 231 98704

004 147 42316

003 192 44765

007 479 21496

;

run;

proc sort data=five;

by id;

run;

/ 结果如下: /

图片

data six;

input Name $ 1-15 @17 balance 4. @23 ID $3.;

cards;

Sandy Lee 100 004

Paul Leny 192 003

John Smith 96 001

Ted Husion 80 005

Martha Chen 150 002

Jason Tod 244 006

;

run;

proc sort data=six;

by id;

run;

/ 结果如下: /

图片

data all3;

merge five six;

by id;

run;

/ 结果如下: /

图片

4.具有相同变量的数据集(使用by语句和in选项)

在上面的例子中,观察值6和7来自两个数据集中的一个。IN=选项创建了一个变量,可以识别数据集是否对输出有贡献。举以下三个例子来让大家理解:

例1:在上面的例子中,我们添加了另一个变量 "source",并使用IN=选项来识别每个输入数据集的贡献:

data all4;

length source $8;

merge five(in=in1) six(in=in2);

by id;

if in1 and in2 then source='Both';

else if in1 then source='Left';

else source='Right';

run;

/ 结果如下: /

图片

例2:在上面的例子中,如果我们希望输出的数据集只包含来自两个输入数据集的观察值:

data all5;

merge five(in=in1) six(in=in2);

by id;

if in1 and in2 ;

run;

/ 结果如下: /

图片

例3:我们希望输出的数据集包含所有来自five输入数据集的观测值:

data all6;

merge five(in=in1) six(in=in2);

by id;

if in1 ;

run;

/ 结果如下: /

图片

注意:如果匹配合并的目的是一对一的匹配合并,输入的数据集应该没有重复的键。因此,在合并之前,可能需要在合并前对proc sort使用NODUPKEY选项。

二、一对多或多对一合并数据集

BY变量值在某一输入数据集中存在重复值,即在其中一个输入数据集中,含有两条或两条以上的观测具有相同的BY变量值,也称为一对多合并。

在匹配过程中会遵循如下原则:由输入数据集读入的变量值,会保留在PDV中,直到被下一个读入的观测值覆盖或该BY组合处理完毕被重置为缺失值为止。为了更好的理解,通过一个简单的例子来具体讲解这一原则。

data seven;

input ID $3. zip 6.;

cards;

001 16431

005 46298

002 98704

004 42316

003 44765

007 21496

;

run;

proc sort data=seven out=seven;

by id;

run;

/ 结果如下: /

图片

data eight;

input Name $ 1-15 @17 balance 4. @23 ID $3.;

cards;

Sandy Lee 100 004

Paul Leny 192 003

John Smith 96 001

Ted Husion 80 005

Martha Chen 150 002

Jason Tod 244 006

Avery 200 001

;

run;

proc sort data=eight out=eight;

by id;

run;

/ 结果如下: /

图片

data all7;

merge seven eight;

by id;

run;

/ 结果如下: /

图片

三、多对多合并数据集

虽然在匹配合并时,一般情况下BY变量值至多在某一个数据集中有重复,但并不代表匹配合并只能处理这一种情况,它同样可以处理两个或两个以上输入数据集中的BY变量值重复的情况,也就是实现多对多合并。

SAS的匹配原则和一对多合并时一样,并且新数据集中每一个BY变量值重复的次数和输入数据集中重复次数最多的一样。

data nine;

input id$3. number;

cards;

001 2

001 3

002 2

002 4

;

run;

proc sort data=nine out=nine;

by id;

run;

/ 结果如下: /

图片

data ten;

input id$3. balance;

cards;

001 100

001 192

002 150

002 200

003 136

;

run;

proc sort data=ten out=ten;

by id;

run;

/ 结果如下: /

图片

data all8;

merge nine ten;

by id;

run;

/ 结果如下: /

图片

在上例中,all8数据集中有一部分id号的number信息,如果不想将这些id的信息包含在新生成的数据集中,就需要确定数据集使用数据集选项IN=可以帮助实现这一功能。

data all9;

merge nine(in=in1) ten(in=in2);

by id;

if in1;

run;

/ 结果如下: /

图片

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

    关注

    2

    文章

    516

    浏览量

    32649
  • 数据集
    +关注

    关注

    4

    文章

    1178

    浏览量

    24351
收藏 人收藏

    评论

    相关推荐

    SAS走进企业级存储应用

    。 从并行到串行SCSI的转变为用户提供了种更 新的路线图,根据SCSI商业协会(STA)的计划,将及时地从目前的3Gb/s发展到12Gb/s。SAS技术规范也准许在同应用中同时使用串行 ATA
    发表于 11-13 21:58

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

    SAS宽端口的胖数据管道。新出现的RAID控制器和存储子系统利用了SAS宽端口的带宽和低成本的优势。SAS通过在混合SAS和SATA硬盘的
    发表于 11-13 21:59

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

    显著减少开发费用和加快产品上市时间。SMS个主要特性是可以在整个SAS结构接入控制区进行完整配置和管理,此外,SMS通过图形用户界面以分级形式显示SAS结构,便于将正确的分区特性分配给扩展器和终端设备。
    发表于 06-02 09:31

    SAS固态硬盘存储技术

    、冲击、腐蚀、高温、低温、盐雾、潮湿等恶劣的作业环境。 速度:ASpec元存工业级SAS固态硬盘是个完全的双向系统,而SATA则继承了IDE的特性,是半双向通信的系统。因此SAS数据
    发表于 06-18 05:00

    SAS硬盘有什么特点?

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

    PCIExpress SATA和SAS设计验证的简化

    Simplify the validation of your PCI Express®, SATA and SAS designs with the first full-capability protocol viewer built into a digital oscilloscope
    发表于 11-05 14:07

    SAS接口的设计

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

    请问什么是SAS硬盘?具有哪些特点?

    请问什么是SAS硬盘?具有哪些特点?
    发表于 11-04 06:09

    数据文件合并

    次练手写的小工具,可以批量将大量测试数据文件合并个文档,以便后续处理,奉上源码,各位可自由发挥。
    发表于 03-04 16:52

    东芝与尔必达将合并内存业务

    今天内存行业的横向整合正在展开,内存芯片制造商尔必达(Elpida)和东芝正在洽谈内存业务合并事宜。
    发表于 01-06 09:50 547次阅读

    结构粒化的数据合并

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

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

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

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

    前面我们介绍了在data step中用merge的方法可以对数据横向合并,这节我们来讲讲在procedure过程步中用proc sql的方法对数据集进行
    的头像 发表于 05-19 10:47 3369次阅读
    <b class='flag-5'>SAS</b>:<b class='flag-5'>数据</b>集的<b class='flag-5'>横向</b><b class='flag-5'>合并</b>(二)

    SAS数据集的input输入方式

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

    pandas中合并数据的5个函数

    今天借着这个机会,就为大家盘点一下pandas中合并数据的5个函数。 join join是基于索引的横向拼接,如果索引一致,直接横向拼接。如果索引不一致,则会用Nan值填充。 索引一致
    的头像 发表于 10-31 11:11 310次阅读
    pandas中<b class='flag-5'>合并</b><b class='flag-5'>数据</b>的5个函数