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

SAS SQL

前几天有个朋友建议我写点关于SAS的Proc SQL,今天我就稍微整理了一下几个比较常用的知识点。SQL的全称是Structured Query Language,结构化查询语言。在关系型数据库的计算机查询语言里面,SQL算是鼻祖了。SAS作为一个大而全的统计软件,自然不会漏掉这块,将其整合到了一个procedure里。

接下来正式开始。说明白一个道理最好的方法还是举例,先准备两个数据集:

Dataset 1: X1(3个变量,6条记录)

Dataset 2: X2(同样是3个变量,6条记录)

Example 1: Cartesian Product Join

这是我最喜欢SQL的一点,生成笛卡尔乘积数据集D(共6*6=36条记录):

生成这一数据集后,能做的事就很多了,主要在条件筛选方面,比如确定Analysis Window的时候。下面的程序给出的是在treatment相同且任意visit时,x1

但在实际操作过程中,这两步通常是合二为一的,因为两个一万条记录的datasets的笛卡尔乘积数据集就是一亿条,会严重消耗系统资源,所以一般程序如下:

SAS的Data Step应该也能实现一样的功能,但我没试过,有兴趣的小伙伴可以尝试下。

Example 2: Empty Dataset:

方法1: Proc SQL

方法2:Data Step

两种方法结果都如下(一个数值型变量,两个字符型变量,记录数为零),语法难易方面,区别不明显。

Example 3: Union

方法1:Proc SQL

结果如下:

有意思的地方是两个数据集合起来了,但变量名是第一个数据集的。

方法2:Data Step

结果如下:

跟Proc SQL相比,差别就不言而喻了。

Example 4:Inner Join

方法1:Proc SQL

结果如下:

方法2:Data Step

结果如下:

两种方法结果一致(虽然Proc SQL有冗余的变量trtn1 trtn2,avisitn1 avisitn2),但语法方面,Proc SQL似乎略胜一筹。

Example 5:Outer Join - Left Join

方法1:Proc SQL

结果如下:

方法2: Data Step

结果如下:

Example 6: Outer Join - Right Join

方法1:Proc SQL

结果如下:

方法2:Data Step

结果如下:

仔细体会一下例4,例5和例6,就能明白在inner join, left join,和right join方面,Proc SQL和Data Step的异同点。

Example 7:Macro Variable

上面的程序时从数据集X1读取所有变量名,然后输出到一个宏变量names:

names = trtn1 avisitn1 x1

这段程序稍微修改了一个地方,输出的宏变量值是以逗号分隔的:

names = trtn1, avisitn1, x1

Example 8:Summary Function

上面这段程序的功能跟Proc Means和Proc Univariate很类似,都是给出某个随机变量的descriptive statistics。结果如下:

这里提一下,Proc SQL在做浮点运算时(例如计算mean, median, std),精度方面跟Proc Means和Proc Univariate会有一些很微小的差异。精度似乎是差一些,小伙伴们可以自己验证一下。

总结

Proc SQL的功能远不止今天提到的这些,我所知道的也只是一些皮毛。我见过有些高手把Proc SQL用得是活灵活现,虎虎生风

好啦,今天就说到这。祝各位小伙伴晚安

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券