【学习】七天搞定SAS(五):数据操作与合并

数据集操作永远是逃不掉的问题,最简单的就是两个数据集的合并——当然不是简简单单的行列添加,按照某一主键或者某些主键合并才是最常用的。在SAS中,要熟悉的就是SET这个声明,可以用改变数据集等等。

生成新变量

这里一个比较简单的例子,就是有一个现成的数据集,我们想增加一个变量。

这样的结果就是增加了一个新的变量

行合并

这里比较类似于R里面的rbind()函数,就是直接在尾部附上后面的数据。当SET指定了两个或多个数据集的时候,可以进行这样的操作。距离如下:

然后结果输出为:

这里很容易看出,对于第一个数据集没有的变量LOT,会自动添加缺失值。

SET还可以进一步结合BY对数据排序:

这样返回的结果就是按照PassNumber排序的了:

SAS一对一合并数据集

类似于SQL的join和R的merge,SAS也可以合并数据集。先从最简单的一对一合并说起:

这样就可以得到按照CodeNum来合并这两个数据集了,返回结果为:

当然一对多也是可行的。

原数据为:

然后代码为:

最后得到的结果就是:

有的时候我们还想把一些统计量也合并进来,比如PROC MEANS得到的那些,这样自然也是不怎么麻烦的。

这里用到了OUTPUT输出统计结果到SAS数据集,这样最后结果就是:

还有一些特定的情况,可以不用MERGE而是UPDATE,这个就得稍稍小心一点了...

基本就是把patientmaster这个数据集用transactions里面有的数据覆盖掉相应的记录。

SAS里面拆分数据

在读入数据的时候,SAS还可以自动按照某些条件把其拆分为两个数据集,这里需要调用OUTPUT声明。

得到的就是两个数据集(虽然我们读入的只有一个...你也可以理解为生成了两个原数据集的子集):

这里就类似于R里面的split()函数了。

还有一些数据格式比较不稳定,比如一行多条记录:

这个时候就可以利用OUTPUT的操作,来逐行读取并输出:

最后得到的数据就相当规范了(我在想为啥SAS可以有这么多奇葩的数据输入...真折磨人啊):

SAS里面变量选取等参数

其实DATA里面的参数还是蛮多的,除了以前提到过的KEEP,DROP,还有可以重命名的RENAME等。还有一个比较有用的可能就是IN了:

这样可以增加一个新的变量Recent,来记录某条记录是否被合并。

WHERE的用法也可以稍稍赘述一下:

这样得到的结果为:

SAS中数据的转置:TRANSPOSE

数据的转置有时候也是逃不掉的。这里就有些类似于R里面的reshape()函数了,但是肯定没有reshape2里面的melt and cast强大...我一度觉得reshape2的用法很麻烦,后来才发现原来这东西真的强大到一定程度了...

结果为:

SAS里面自带的变量

SAS里面有些默认自带的变量,有时候用起来还是蛮方便的,类似于R会自带一个row.names这种变量。

比如_N_就会加上行号(当然有时候也不是,呃,准确的说应该是SAS执行的循环顺序,说了SAS是一行行操作数据的嘛):

这样得到的结果就是排序后的次序了:

类似的变量还有FIRST.variable和LST.variable,这里由于我们用到了 FIRST.AgeGroup,所以第二次输出的时候只有第一个AGE GROUP的结果。

原文发布于微信公众号 - PPV课数据科学社区(ppvke123)

原文发表时间:2014-06-25

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏飞扬的花生

Dapper.Net 应用

                                                     Dapper应用 1.Dapper是什么     Da...

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

关于db_files和maxdatafiles的问题(r4笔记第31天)

昨天在做生产监控的时候发现有个库的表空间不够了,就发邮件给客户的dba去处理,但是得到的反馈是尝试添加的时候发现已经超过了数据文件的最大数限制。这个错误毫无疑问...

36560
来自专栏大数据架构

Spark SQL / Catalyst 内部原理 与 RBO

从上图可见,无论是直接使用 SQL 语句还是使用 DataFrame,都会经过如下步骤转换成 DAG 对 RDD 的操作

32860
来自专栏ChaMd5安全团队

SQLI-LABS 更新帖(一)

docker搭建环境 请自己安装好docker,然后使用ubuntu:14.04的镜像 docker pull ubuntu:14.04 以下是pcat提供的...

38480
来自专栏跟着阿笨一起玩NET

C#常用工具类——Excel操作类

16510
来自专栏Alan's Lab

[Coursera][From Nand to Tetris / Part I] 第六周 汇编器项目 python 实现

今天折腾一上午,终于 完成了 Coursera 上 From Nand to Tetris / Part I 这个课程的最后一个汇编器项目。这套课程真是没白跟,...

15830
来自专栏Core Net

.Net cache与cache更新

35750
来自专栏程序员的SOD蜜

同样的SQL语句在查询分析器执行很快,但是网站上执行超时的诡异问题

    同样的SQL语句在查询分析器执行很快,但是网站上执行超时,这个问题以前遇到过,解决办法是重新启动服务器,但过一段时间后(时间长短不一定,一般为一天后),...

30270
来自专栏Python

Django---ORM操作大全

前言 Django框架功能齐全自带数据库操作功能,本文主要介绍Django的ORM框架 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞:...

1.1K100
来自专栏逍遥剑客的游戏开发

哇哈哈, 终于天上掉箱子了

14240

扫码关注云+社区

领取腾讯云代金券