1 SAS:​数据集的横向合并(一)-德赢Vwin官网 网
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;

/ 结果如下: /

图片

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

    关注

    2

    文章

    523

    浏览量

    32860
  • 数据集
    +关注

    关注

    4

    文章

    1208

    浏览量

    24688
收藏 人收藏

    评论

    相关推荐

    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

    SAS接口的设计

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

    数据文件合并

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

    结构粒化的数据合并

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

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

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

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

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

    SAS:数据横向合并(二)

    前面我们介绍了在data step中用merge的方法可以对数据横向合并,这节我们来讲讲在procedure过程步中用proc sql的方法对数据
    的头像 发表于 05-19 10:47 4794次阅读
    <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 2906次阅读
    ​<b class='flag-5'>SAS</b><b class='flag-5'>数据</b><b class='flag-5'>集</b>的input输入方式

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

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

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

    德赢Vwin官网 网站提供《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 500次阅读
    Yonghong Desktop端Excel <b class='flag-5'>数据</b><b class='flag-5'>集</b>的优化