楼主: intheangel
77541 83

[原创博文] PROC SQL 的一点小结   [推广有奖]

  • 3关注
  • 89粉丝

VIP

副教授

25%

还不是VIP/贵宾

-

威望
1
论坛币
49842 个
通用积分
6.1883
学术水平
152 点
热心指数
168 点
信用等级
122 点
经验
12931 点
帖子
480
精华
0
在线时间
475 小时
注册时间
2013-11-22
最后登录
2023-6-28

初级热心勋章

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
实习过或者有志于从事数据这一块的同学肯定都知道SQL 的query 是所有数据挖掘的入门工具,实习的时候boss也说了,想要进这种数据挖掘的公司,不会SQL是想都不用想了,我最早接触SQL语句就是从SAS中的PROC SQL开始,一开始也只是图 select 变量或者数据会快一些,后来实习或者面试 ,然后自己看书,渐渐发现SQL确实是一个非常强大的工具,在SAS中也是如此,熟练了SQL语句,你的数据检索能力会有一个质的飞跃,无论是在质上还是在速度上。我这篇文章主要是借鉴的SAS 公司的 SAS_9.2_SQL_Procedure_User's_Guide,当然是英文版的,这本书非常全,我主要会介绍比较常用的query语句,剩下对于宏的SQL应用,有兴趣的同学可以和我交流。

这本书和书上的数据集我也会附在附件里,希望有兴趣的同学可以回去下载,然后仔细看看,并且实际练习一下;

variable: 变量;
table: 数据表;
condition: 条件语句;

(一)
首先我简单的介绍一下基本的query语句,从一个表中来选取变量,基本的格式是这样的:
select  variable1, variable2, variable3.....from table
where condition1 and/or condition2....
group by variable1, variable2, variable3......
having condition1, condition2.....  
order by variable1, variable2
这就是最基本的格式select, from, where, group by, having, order by
但是这边会有一些地方需要大家注意,首先select出来的语句会直接print到你的观察视窗中,你选定的输出地点;

这边where 和 group by 是不能一起使用的,简单的举例来说,是这么个情况,你要从一个table中选变量,但是你对变量有要求,你可以用where来进行一个筛选;你要对变量进行分类, 你用group by, 这里就有一个分类的问题在这里, 为什么要分类, 怎么分类;
其实, 对于我个人来说, group by 主要是和聚集函数用在一起(也就是sum, count, max, min之类), 比如说对性别(sex)分别求sum, 那么就可以这么写
select sum(variable) as sum group by sex
(这里是把这个总量设成一个新的变量叫sum, 这里as是可以不加的,但是我觉得最为一个初学者, 最好可以把这些as, 以及我稍后会讲到的那些label, 能写的最好都写完整, 以后熟练了, 再开始简写会比较好, 反正我现在的状态都是会写完整的, 菜鸟水平) ;

但是group by 和where 是不能一起使用的, 那我要是再想进行分类该怎么办呢, 这里就要讲到一个非常重要的选项having, having语句设定的机制是这样的,当有聚集函数和group by语句的时候, 它就是根据group by 的结果来进行分类, 举个例子来说

select sum(height) as sum label='总身高' format=4.1 from class
group by class
having calculated sum gt 150
order by sex desc

这一个过程中有好几点大家可以看出来,首先,sum(height)是一个聚集函数(不一定是函数,我们简单的计算也是可以使用的,甚至直接写“...”内容也是可以的),as sum 是命名为sum,而且后面可以直接跟label和format,这里label也是可以省略的,但是我推荐大家保留,group by class,那么这个sum就会对年龄进行分类处理,对各个班级开求总身高,having 这里就是对sum设定一个条件,只要总身高大于150的这些班级;
order by 就是对结果进行排序,desc就是降序,默认是升序,这里和proc  sort 的by 语句有点小区别和相同点,desc 都只对一个变量有用,但是这里是加在变量后面, 而proc sort 是加在变量前面;

ps: 大家经常会看到*这个符号,这个就是选取所有的变量, eg. select * from class, 那么就会把class 中所有的变量都输出出来;

然后我再来简单的讲一下case语句的用法;

case 其实是在正规的sql语句中用的非常多的一个语句,但是SAS中我们往往很少用,我觉得原因是SAS中再data步中可以完成case语句的作用,所以大家在做的时候其实都会用if then 语句来解决这个问题,当然,我觉得if then 比case 灵活很多,而且在mysql中其实也是会经常用if then 语句的,这个跑题了;

case variabel
when then
...
else ..
end as variabel2

这个就是case 的基本格式(请大家注意else这个语句,该用的时候千万不要漏了)

我来举个例子
eg.
case sex
when male then '男人'
else '女人'
end as sex2
我就造了一个新变量叫sex2,当然,也可以不把sex放在上面
case
when sex = 'male' then '男人'
else '女人'
end as sex2
两个用法是一样的;

这些就是很简单的检索语句;
中间有很多有用的语法和小技巧,比如说count(distinct name) 这里计算的就是不重复的名字数目;
还有where 的一些用法 where like , where in (...), where in (select ... from ...)我就不一一详细介绍了,感兴趣的同学可以去书里看看,都介绍的很清楚,有什么问题可以和我一起讨论一下,不行可以去请教大神们;


书的地址:https://bbs.pinggu.org/thread-2972382-1-1.html
数据集的地址:https://bbs.pinggu.org/thread-3026450-1-1.html

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:proc sql ROC sql condition Procedure 英文版 文章 能力

已有 8 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
eijuhz + 20 + 2 + 2 精彩帖子
小明12345 + 1 + 1 + 1 精彩帖子
--墨子-- + 5 奖励积极上传好的资料
feifeifeidm + 3 精彩帖子
zqy12666 + 1 + 1 + 1 观点有启发
李会超 + 36 精彩帖子
webgu + 60 + 60 + 2 + 2 + 2 鼓励积极发帖讨论
crackman + 100 鼓励积极发帖讨论

总评分: 经验 + 216  论坛币 + 65  学术水平 + 9  热心指数 + 6  信用等级 + 4   查看全部评分

本帖被以下文库推荐

我是一只瘦瘦的小猪~~~
╭︿︿︿╮
{/-◎◎-/}
( (oo) )
  ︶︶︶
84
Bicq 发表于 2019-7-29 21:26:11 |只看作者 |坛友微信交流群
谢谢分享。

使用道具

83
ssdcx 发表于 2018-12-18 10:12:38 |只看作者 |坛友微信交流群
学习了

使用道具

82
wh7064rg 发表于 2017-2-8 20:33:23 |只看作者 |坛友微信交流群
谢谢分享

使用道具

81
yingj7093 在职认证  发表于 2017-2-8 15:29:09 |只看作者 |坛友微信交流群
请教下,楼主介绍的心得自认为比较熟练了。个人感觉,实际业务中需求加一些函数之类的进去。问题:有大神推荐下好的练习题 或者题库吗? 刷sql用的?  

使用道具

80
stream777 发表于 2017-2-7 15:32:30 |只看作者 |坛友微信交流群
谢谢楼主!

使用道具

79
aicnzheng 发表于 2017-1-20 21:23:19 |只看作者 |坛友微信交流群
intheangel 发表于 2014-5-3 17:45
(三)
最后再写一写关于建立table的问题吧,这个方面比较简单;
我把个人的理解写一下就好
楼主楼主,我想请问下
create table as
select variable from table1

之中as是表示什么呀,初学者,好揪心,谢谢!!!

使用道具

78
seanfang1992 发表于 2016-8-7 19:10:40 |只看作者 |坛友微信交流群
多谢楼主!

使用道具

77
cv04356015 发表于 2016-8-4 09:38:21 |只看作者 |坛友微信交流群
太詳細咯,感謝分享啊,準備來收藏

使用道具

76
pan_shirley 发表于 2016-8-4 08:14:07 |只看作者 |坛友微信交流群
真是好书,而且还是免费的,谢谢楼主的分享!

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-15 15:49