首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【学习】七天搞定SAS(五):数据操作与合并

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

作者头像
小莹莹
发布2018-04-19 12:04:09
2.1K0
发布2018-04-19 12:04:09
举报

数据集操作永远是逃不掉的问题,最简单的就是两个数据集的合并——当然不是简简单单的行列添加,按照某一主键或者某些主键合并才是最常用的。在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的结果。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2014-06-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PPV课数据科学社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 生成新变量
  • 行合并
  • SAS一对一合并数据集
  • SAS里面拆分数据
  • SAS里面变量选取等参数
  • SAS中数据的转置:TRANSPOSE
  • SAS里面自带的变量
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档