首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SAS-Sql的这些用法你都会了么?

在SAS里面,有俩大步,一个data步,另外一个就是proc过程步,而proc过程步中对数据结构的操作与筛选当属Proc sql过程步。看到Sql这几个字母是不是很熟悉,Sql是数据库的一种查询语言,数据库是不是很熟悉(常见的数据库是:DB2,oracl,sql server,postgersql,mysql等),其实吧,所有的数据库查询语言都很相似,SAS中的proc sql其实就是类似数据库的查询语句。用四个字来概括一下SQL语句的功能:“增、删、查、改”。不过在SAS中,主要也就是运用到的“查”的功能。

1

基本结构

见上图:第一部分是一个简单的查询结构,第二部分小编设置快捷键(输入Sql后)自动弹出的结构(一个左连接的基本结构),快捷键的设置见小编历史推送(点击此处自动跳转:快捷键设置)。基本结构是这样的,基本就是这样的。还是用例子个程序来介绍在SAS里面的用途。

2

SQL应用的几个例子

在临床试验中,经常会出一些汇总的报告,比如各中心入组人数,各中心完成试验人数,各中心退出人数,脱了人数...(分中心小结的report),这个时候其实是可以用SQL语句来快速汇总出这些结果。

看上面的一段Sql代码:得到的结果是这样的

这段代码其实很基础:不过用到了SQL 中好几个知识点,其实好像也没神马知识点,也就是一个筛选(where语句),一个计算行数(count(*)),一个分组(group by),一个排序(order by),一个数据集的追加(union all)然后没了,这些都是很基础的用法。当然这儿不一定非要用SQL,也可以用其他的过程步(proc mean /proc freq等)

来见一下:proc freq的写法(不过,小编对freq过程步做汇总不是很熟,总计那个值不知道啥参数可以出,各位大神如果知道告诉我一下,最近变懒了,不想百度了。)

在来见一下:proc mean的写法:

我突然发现...我好像歪楼了~代码越写越少,效果却真的相差无几,其实我想说SQL的优点的...好吧,这样一对比,SQL好像没有优点....其实SQL在这儿也很好用,虽然看着代码长一点,但是我还是很喜欢这样用的。freq过程步与means过程步同样很好用,小编以前都是用freq过程步去算分中心小结的report。我还是建议,方法知道的越多越好...毕竟也是长见识,兴许以后啥时候能通过曾经的几种方法给你写程序的灵感呢。所以啊,没事的时候还是多看书,多思考...

在临床试验数据清洗的时候,我们经常需要用到筛选语句,那么筛选语句改怎么写?where可以出现的位置有哪些呢?

需求1:找出年龄最大的受试者?奥,好像一般没有这样的需求,那就找出年龄大于50岁的受试者?(年龄通用的计算方式:AGE=INT((知情同意日期-出生日期)/365.25));

小编想来想去,还是把怎么求最大年龄写在这里。在这里,有没有发现小编将where 写到need1后面,而不是raw.dm后面。其实这个就是小编想说的,where语句的位置。有时候在不同地方效果不是一样的。

这段代码,小编是写在raw.dm下,但是这样写是回报错的喔。看一看Log说了些神马。

这个ERROR说age,Max_age这些列没有找到?不是明明select的时候创建了这些变量了么?这个问题的答案其实很简单,此处的where语句针对的raw.dm这个数据集进行的筛选,而need2后面的where是针对need2数据集进行的筛选。所以啊...where的位置不同,效果也会不同的~还是贴一下正确程序运行的效果。

在实际的工作中,经常会有一种筛选(子查询)的运用,我有一个清单的受试者,我想要提取清单中受试者的信息,随便举一例:请找出发生不良事件受试者研究总结页填写的信息?哎呀,小编好像是造题小能手,信手拈来就是题

先来看看代码怎么写:

看,代码是不是很少。这里就用到了子查询,看from 那一行中的where语句,查询套查询,其实还能无效套吧。这里小编要说的就是一个子查询功能。效果就不看了~肯定不会有error,我就是那么一个有自信的人!

不管是在那个行业,只要用SAS一般都会对数据结构进行处理吧,多表的合并等操作,各种连接(内连接,外连接,左连接,右连接....等等),在data步中有mege和set,在sql步中就更多了,本篇前面就提到union all,还有join等等。

简单几个例子,小编很早的时候SAS技术不怎么好的时候就特别喜欢用freq,和left ,还有means,还有append合并起来用,算一个分中心小结是不是觉得小编一个简单需求玩出花样的写,就是那么喜欢炫耀自己知识点多~实则不然,那是因为小编技术很low,各种没学好,一个简单的需求,其实几行就搞定了,还搞这么多。。所以啊,技术好的人代码都很精炼,找不出挑剔,这也就是学习多种方法去实现自己的程序的一个好处,用最优的方法,代码拿出去给人看,肯定会有好评的。这也是我不断追求和探索的一个学习方式。要说啥来着,我都忘记了。

在插入一段代码:小编曾经写了一个Output query的Macro,其核心就是利用的Sql中的full join。(点击此处跳转到那个Macro:Macro-Output Query(Edit Check Macro))

接着继续:关于SQL中的多表合并小编也曾经写过一篇推送,利用有merge的用法以及对于SQL的用法:(点击此处跳转:SAS Join(Proc sql) PK Merge(Data Step))

关于SQL的用法小编还是要在推荐一个朋友总结的文章点击此处

关于SQL宏变量的定义,以及数据字典使用,小编打算放到以后写有关宏基础的推送里面写。

Sql还有啥用法呢,好像真的还有很多的,不过小编好像突然失忆了,想不起来了。所以啊,就为大家在推荐一本纯讲SAS中SQL用法的一本书:网盘链接以及为你准备好了:https://pan.baidu.com/s/1c2TXJhQ

名字是这个~

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180124G0UZ7X00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券