SAS进阶《深入解析SAS》之对多数据集的处理

SAS进阶《深入解析SAS》之对多数据集的处理

1. 数据集的纵向串接:

数据集的纵向串接指的是,将两个或者多个数据集首尾相连,形成一个新的数据集。
据集的横向合并:
数据集的横向合并,指的是将两个或者多个数据集根据某种原则横向合并起来,形成新的数据集。

2. 数据集的纵向串接两种方法:1)使用SAS DATA步的SET语句。2)使用SAS过程步的APPEND过程。

2.1. 使用SET步纵向串接形式如下:
DATA 新数据集;
    SET 数据集1 数据集2 <数据集3 数据集4 ...>;
    BY 变量1 <变量2 变量3 变量4...>;
RUN;

使用APPEND过程
PROC APPEND BASE=主数据集 <DATA=追加数据集> <FORCE>;
2.2. 使用APPEND过程,SAS不会处理主数据集中的观测,而是直接将追加数据集的观测添加到主数据集最后一条观测后面,且变量仅包含主数据集中的变量。

3. 数据集的横向合并使用MERGE的两种情况:

不使用BY语句合并,也称为一对一合并。
DATA WORK.COMBINED;
    MERGE WORK.DATA1 WORK.DATA2;
RUN;
一对一合并原则:1)新数据集的第一条观测包含各个输入数据集中第一条观测的信息,第二条观测包含各个数据集中第二条观测的信息,不足的观测用缺失值不足。2)新数据集含有的观测数为所有输入数据集的最大观测是数。

使用BY语句合并,也称为匹配合并。
DATA WORK.COMBINED;
    MERGE WORK.DATA1 WORK.DATA2;
    BY Year;
RUN;

4. 使用数据集选项IN=操作观测

数据集选项IN=可以运用在SET、MERGE、MODIFY、UPDATE语句中的任何数据集后面。

5. 数据集的更新UPDATA

DATA 新数据集;
    UPDATA 主数据集 更新数据集
            <UPDATATE=MISSINGCHECK | NOMISSINGCHCK>;
    BY 变量1 <变量2 变量3 变量4...>;
RUN;

6. UPDATE语句和MERGE与的区别:

1)UPDATA语句只能操作两个数据集;MERGE语句可以对两个或者两个以上数据集进行操作。
2)使用UPDATA语句时必须使用BY语句;MERGE语句在不使用BY语句时也可以按观测号进行一对一合并。
2)在处理缺失值时,UPDATA语句可以控制是否用缺失值对主数据集进行替换;MERGE语句中后一数据集中的缺失值一定能会覆盖前一数据集中的值。
4)当BY变量值在后一数据集或者更新数据集中不唯一时,UPDATA语句和MERGE语句的处理方式不一样。

7. 数据集的更改

7.1 单个数据集的更改MODIFY语句
DATA 原数据集;
    MODIFY 原数据集;
RUN;
7.2 两个数据集的更改MODIFY语句
DATA 主数据集;
    MODIFY 主数据集 修改数据集;
    BY  变量1  <变量2 变量3 ...>;
RUN;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python爬虫实战

MySQL从零开始:数据库简介

从字面意思理解,首先数据库是一个存放东西的库,里面存的东西是数据。以下解释来自百度百科:

672
来自专栏数据和云

又见程序媛 | 从索引的创建角度分析热门“面试题”

关于周一 Eygle 在文章《千头万绪:从一道面试题看数据库性能和安全的方方面面》讲到的 SELECT* FROM girls WHERE age BETWEE...

1114
来自专栏学习有记

SQL Server 索引内部结构:SQL Server 索引进阶 Level 10

1014
来自专栏杨建荣的学习笔记

Oracle表中含有255列以上时需要注意的(r12笔记第77天)

今天看JL(Jonathan Lewis)的一篇文章,真是费了不少的脑细胞,玩Oracle几十年的老司机,看问题的角度和深度果然不一样,当时看他的大作《O...

33910
来自专栏学习有记

阅读查询计划:SQL Server 索引进阶 Level 9

1076
来自专栏数据和云

为什么预估执行计划与真实执行计划会有差异?

一 问题概要 对同一个 SQL 语句的 ExplainPlan 里显示的预估执行计划与通过 V$SQL_PLAN 视图获取的 Runtime Plan 真实执行...

3987
来自专栏令仔很忙

SQL JOIN

在机房收费系统个人重构的时候,很多的功能都需要根据数据库中的一个表中的信息,去查询另一个表中相匹配的信息,我们用到了视图,但是你有没有注意到下面的SQL语句呢...

541
来自专栏维C果糖

史上最简单的 MySQL 教程(二)「关系型数据库」

关系型数据库,是一种建立在关系模型(数学模型)上的数据库。

3989
来自专栏禁心尽力

一次浴火重生的MySQL优化(EXPLAIN命令详解)

一直对SQL优化的技能心存无限的向往,之前面试的时候有很多面试官都会来一句,你会优化吗?我说我不太会,这时可能很多人就会有点儿说法了,比如会说不要使用通配符*...

1805
来自专栏AhDung

【SQL】分享表值函数FMakeRows,用于生成行

评论中又有一位【笑东风】兄给出改善建议,在此先感谢他。原理是借助行数较多的一个系统视图sys.all_columns与自身做cross join,以得到大量现成...

693

扫码关注云+社区