- 1、本文档共35页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
SAS编程数据挖掘学习与帮助文档-5.
《SAS编程与数据挖掘商业案例》学习笔记之十七
(2013-08-09 21:29:50)
HYPERLINK javascript:; 转载▼
标签:
HYPERLINK /?c=blogq=sasby=tag \t _blank sas
HYPERLINK /?c=blogq=%CA%FD%BE%DD%CD%DA%BE%F2by=tag \t _blank 数据挖掘
HYPERLINK /?c=blogq=sqlby=tag \t _blank sql
HYPERLINK /?c=blogq=sas%B1%E0%B3%CCby=tag \t _blank sas编程
HYPERLINK /?c=blogq=join%D3%EF%BE%E4by=tag \t _blank join语句
分类: HYPERLINK /s/articlelist_2282988462_7_1.html \t _blank SAS编程
继续读书笔记,本次重点sas sql语句,由于sql内容多且复杂,本文只介绍商业应用中常用的并且容易出错的地方,内容包括:单表操作、多表关联、子查询以及merge和join的区别
1.单表操作
eg1:
Proc sql outobs=10; *可选项,功能类似于data步中的obs数据集选项
create table class as
Select name,
case when sex eq M then 1 when sex eq F then 2 else 3
end as sex_tran label=sextrans, *输出数据集中作为sex_trans的中文标签
sum((weight-20)) as new1 format=16.2, *sas查询特有的形式
sum((height-10)) as new2 format=16.2,
(calculated new1 - calculated new2) as new, *calculated是sas在sql中特有的语句,用于对产生的新变量再操作
From sashelp.class(where=(height between 50 and 70))
Group by name,calculated sex_tran;
eg2:
proc sql;
create table test1 as
select
id,
max (txn_seq) as txn_seq,
sum (amount) as sum_amt
from chap11.having1
group by id
having calculated sum_amt ge 70
;
quit;
注:having语句出现在group by后面,如果没哟group by语句,系统默认having语句和where语句效果相同
proc sql;
create table test2 as
select
id,
txn_seq,
amount
from chap11.having1
group by id
having txn_seq= max (txn_seq)
;
quit;
注:having语句和group by语句同时出现时,select后面不一定需要汇总函数如sum等,上例中,按照每一个id取最大的txn_seq
proc sql;
create table test3 as
select
id,
txn_seq,
amount
from chap11.having2
group by id
having txn_seq = max (txn_seq)
;
quit;
having语句和max或min结合使用时,一定要注意having后面的变量在每一个id中的唯一性。
2.多表关联
左联接在join变量是一对一的情况下,如果where在表的外面,则where条件是先关联表,后筛选数据,如果where在表中,则是先筛选数据后关联表,and也是先筛选数据后关联表;因而表内写where和表外写and是完全一样的。以下程序,2和3完全一样,但是1和后面两个不一样
eg:
proc sql;
create table leftjoin1 as
select
case
when b.rmb_id eq . then a.id
else b.rmb_id
end as all_rmb,
a.id,
b.rmb_id,
b.usd_id
from chap11.left_join_1 as a
left join chap11.left_join_2 as b
on a.id=b.usd_id
where rmb_id le 4
;
quit;
proc sql;
create ta
文档评论(0)