SAS编程数据挖掘学习与帮助文档5.docx
- 文档编号:26028658
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:32
- 大小:93.52KB
SAS编程数据挖掘学习与帮助文档5.docx
《SAS编程数据挖掘学习与帮助文档5.docx》由会员分享,可在线阅读,更多相关《SAS编程数据挖掘学习与帮助文档5.docx(32页珍藏版)》请在冰豆网上搜索。
SAS编程数据挖掘学习与帮助文档5
《SAS编程与数据挖掘商业案例》学习笔记之十七
(2013-08-0921:
29:
50)
转载▼
标签:
sas
数据挖掘
sql
sas编程
join语句
分类:
SAS编程
继续读书笔记,本次重点sassql语句,由于sql内容多且复杂,本文只介绍商业应用中常用的并且容易出错的地方,内容包括:
单表操作、多表关联、子查询以及merge和join的区别
1.单表操作
eg1:
Procsqloutobs=10;*可选项,功能类似于data步中的obs数据集选项
createtableclassas
Selectname,
casewhensexeq'M'then"1"whensexeq'F'then"2"else"3"
endassex_tranlabel="sextrans",*输出数据集中作为sex_trans的中文标签
sum((weight-20))asnew1format=16.2,*sas查询特有的形式
sum((height-10))asnew2format=16.2,
(calculatednew1-calculatednew2)asnew,*calculated是sas在sql中特有的语句,用于对产生的新变量再操作
Fromsashelp.class(where=(heightbetween50and70))
Groupbyname,calculatedsex_tran;
eg2:
procsql;
createtabletest1as
select
id,
max(txn_seq)astxn_seq,
sum(amount)assum_amt
fromchap11.having1
groupbyid
havingcalculatedsum_amtge70
;
quit;
注:
having语句出现在groupby后面,如果没哟groupby语句,系统默认having语句和where语句效果相同
procsql;
createtabletest2as
select
id,
txn_seq,
amount
fromchap11.having1
groupbyid
havingtxn_seq=max(txn_seq)
;
quit;
注:
having语句和groupby语句同时出现时,select后面不一定需要汇总函数如sum等,上例中,按照每一个id取最大的txn_seq
procsql;
createtabletest3as
select
id,
txn_seq,
amount
fromchap11.having2
groupbyid
havingtxn_seq=max(txn_seq)
;
quit;
having语句和max或min结合使用时,一定要注意having后面的变量在每一个id中的唯一性。
2.多表关联
左联接在join变量是一对一的情况下,如果where在表的外面,则where条件是先关联表,后筛选数据,如果where在表中,则是先筛选数据后关联表,and也是先筛选数据后关联表;因而表内写where和表外写and是完全一样的。
以下程序,2和3完全一样,但是1和后面两个不一样
eg:
procsql;
createtableleftjoin1as
select
case
whenb.rmb_ideq.thena.id
elseb.rmb_id
endasall_rmb,
a.id,
b.rmb_id,
b.usd_id
fromchap11.left_join_1asa
leftjoinchap11.left_join_2asb
ona.id=b.usd_id
wherermb_idle4
;
quit;
procsql;
createtableleftjoin2as
select
case
whenb.rmb_ideq.thena.id
elseb.rmb_id
endasall_rmb,
a.id,
b.rmb_id,
b.usd_id
from
chap11.left_join_1asa
leftjoinchap11.left_join_2
(where=(rmb_idle4))asb
ona.id=b.usd_id
;
quit;
procsql;
createtableleftjoin3as
select
case
whenb.rmb_ideq.thena.id
elseb.rmb_id
endasall_rmb,
a.id,
b.rmb_id,
b.usd_id
fromchap11.left_join_1asa
leftjoinchap11.left_join_2asb
ona.id=b.usd_id
andrmb_idle4
;
quit;
3.子查询
in子查询效率比join低很多,而exist子查询效率更低;
4.merge和sql的比较
在“一对一”和“多对一”的情况下,效果完全相同,但是在“多对多”情况下,则完全不同。
创建测试数据集
dataa1;
inputxy@@;
cards;
10111023
103301045
;
run;
dataa2;
inputxy@@;
cards;
1011010230
103510550
;
run;
dataa3;
inputxyz1@@;
cards;
101111102332
102300310454
;
run;
dataa4;
inputxyz2@@;
cards;
10115102306
102571021008
10220091055010
;
run;
eg1:
求a1和a2的交集
sql实现:
merge实现
procsql;
select
a1.x
a2.y
froma1joina2
ona1.x=a2.x
;
quit;
procsortdata=a1;byx;run;
procsortdata=a2;byx;run;
dataa12;
mergea1(in=ina)a2(in=inb);
byx;
ifinaandinb;
procprint;run;
注:
sql是通过内连接实现,merge通过ifinaandinb实现
eg2:
用数据集a2来更新数据集a1
sql实现:
merge实现
procsql;
select
a1.x
casewhena2.yisnotnullthena2.y
elsea1.yendasyy
froma1
leftjoina2
ona1.x=a2.x
;
quit;
procsortdata=a1;byx;run;
procsortdata=a2;byx;run;
dataa12;
mergea1(in=ina)a2(in=inb);
byx;
ifina;
procprint;run;
注:
sql通过左联接方式实现,merge通过ifina方式实现,等价于左联接
eg3:
用数据集a2来更新数据集a1,同时保留两个数据集所有观测
sql实现:
merge实现
procsql;
select
coalesce(a1.x,a2.x)asx
coalesce(a2.y,a1.y)asyy
froma1
fulljoina2
ona1.x=a2.x
;
quit;
procsortdata=a1;byx;run;
procsortdata=a2;byx;run;
dataa12;
mergea1a2;
byx;
run;
procprint;run;
注:
sql通过全连接方式实现,需求中需要用a2所有变量更新a1,所以一定要把a2变量放在前面,被更新的数据集放在后面,但是对join的匹配变量,对这种顺序无要求;merge没有使用in=选项,等价于全连接;
eg4:
多对多
sql实现
merge实现
procsql;
select
a3.x,a4.y
a3.z1,a4.z2
froma3
joina4
ona3.x=a4.x
;
quit;
procsortdata=a3;byx;run;
procsortdata=a4;byx;run;
dataa34;
mergea3(in=ina)a4(in=inb);
byx;
ifinaandinb;
run;
procprint;run;
注:
sql形式会出现重复值,匹配到的数据会进行笛卡尔;
而merge则因为ifinaandinb的作用,避免了重复
5.创建表
复制已有的表属性
procsql;
createtablea
likesashelp.class;
describetablea;
quit;
6.行操作
添加行操作
使用set语句
使用value语句
使用select语句
procsql;
insertintocountries
setname='bangladesh',
capital='dhaka',
population=126391060
setname='japan',
capital='tokyo',
population=126352003;
quit;
procsql;
insertintocountries
values('pakistan','islamabad',123060000)
values('nigeria','lagos',99062000);
quit;
procsql;
createtablenewconntries
likecountries;
insertintonewconntries
select*fromcountries
wherepopulationge120000000;
quit;
最后注意:
多表关联时,最好不要超过5个表,除非都是代码表,否则sql会产生很大的临时空间,从而降低程序性能
除非必须,否则优先使用关联,而不要用子查询
在使用set操作符时,如果set表没有重复行,则使用unionall会提高性能
如果有索引,尽可能用索引和where语句结合
尽量避免多对多join
《SAS编程与数据挖掘商业案例》学习笔记之十八
(2013-08-1516:
31:
21)
转载▼
标签:
数据挖掘
数据分析
sas
logistic
建模
分类:
数据挖掘
接着以前的《SAS编程与数据挖掘商业案例》,之前全是sas的基础知识,现在开始进入数据挖掘方面笔记,本文主要介绍数据挖掘基本流程以及应用方向,并以logistic回归为例说明。
一:
数据挖掘综述
衡量一个数据挖掘模型价值的唯一标准就是商业目标,为达到一个商业目标,有很多种方法,只有高效解决商业目标的方法才是最牛的方法,即使是看似简单的方法,只要能高效解决商业目标,我们就认为是牛的方法;
面对海量的数据,即使是使用了最先进的工具,最复杂的算法,但是如果挖掘出来的知识是无用的,或者挖掘的结果是无法解释的,那这种挖掘也是失败的。
很多人对数据挖掘都有一个误解,认为一定要使用复杂的工具和复杂的算法,其实是一种误导。
数据挖掘流程:
商业理解、数据收集、数据清洗、数据特征化、数据建模、模型打分、模型验证、模型实施、模型优化
描述分析:
对已经发生的现象进行分析,主要分析技术有描述性分析、数据特征化、聚类分析、孤立点分析
因果分析:
寻找发生的原因,主要技术有联机分析、相关性分析、回归分析、关联分析、因子分析
分类和预测:
主要分类技术:
决策树、判别分析、贝叶斯分类、logistic回归分析、神经网络、支持向量机等
预测技术有:
多元线性回归分析、广义线性回归分析、非线性回归分析、神经网络分析
二:
商业目标:
1、评价活动的效果:
比较分析
通过开展工作组和控制组进行比对。
2.特征分析
比如要分析高价值客户的特征,通过特征化数据(均值、方差、极值)、相关性度量(相关系数、卡方值、基尼系数、熵)、聚类分析、因子分析等发现表面的和潜在的数据特征。
3.市场细分
市场细分由业务主导,而不是技术主导。
细分结果一定要以易于开展营销活动为目的。
4.响应
提高某个营销活动的响应度
5.风险
风险控制指标通常包括:
资产负债情况、信用记录、工作稳定性、收入、教育程度、家庭人口结构
风险模型的建立在技术上类似于响应模型,但对于业务上有很大的区别,比如定义目标变量上,风险模型可能有很多因素决定,一个比较常见的定义:
拖欠额度超过某一数值,并逾期超过3个月的客户作为风险客户(目标变量值为1,其余情况为0)
6.流失
重点在于流失目标变量的定义;
7.提升销售和交叉销售
数据挖掘商业应用的最高原则是:
“效率、效果”
3.需求文档
需求文档包括三部分
项目计划文档(ppt)
商业目标、
技术目标、
计划内容、
项目路线图、给出分析团队如何实施项目的明确时间表和每一阶段的任务
资源:
是每一个项目阶段所需要的参与项目人员
方法论设计文档(word)
是解决商业需求的技术文档,是一个解决方案,最核心的内容是组合不同的算法,并给出最终能达到的理论目标
变量需求文档(excel)
4.建模流程图
5.logistic建模及结果详解
商业应用领域,logistic回归是应用最广泛的预测模型,神经网络存在过度拟合的嫌疑,而决策树可能存在预测结果的不稳定性,并且在大数据的情况下决策树存在失灵现象,因此logistic回归相对于另外两个是一个适度的模型,再加上输出结果有很好的解释性,应用很广泛
logistic变换:
logit(p)=ln(p/1-p)然后再与自变量进行线性拟合
logistic回归中,因变量y服从二项分布或多项分布,而线性回归分析中y是服从正态分布
logistic回归中不存在线性回归中的残差项,
logistic回归采用MLE(最大似然估计),而线性回归分析采用的是LSE(最小二乘估计)
LSE的原理是假设残差独立同分布,然后构造样本函数,使得因变量的观测值和模型估计值之间的离差平方和最小。
MLE的原理,是构造似然函数,对于二值型的logistic回归来说,服从二点分布,
评价模型好坏的指标:
1)拟合优度
拟合优度是衡量预测值和观测值之间的总体一致性,但是在评价模型时,实际上测量的是预测值和观测值之间的差别,实际上是模型预测的“劣度”,即拟合不佳检验,常用的指标是HL(hosmer-lemeshow)和IM(informationmeasures)
HL是一种类似于皮尔逊-卡方统计量的指标,对应的统计假设H0是预测值概率和观测值之间无显著差异,因而如果HL有较大的P值,则接受原假设,说明统计结果不显著,因而,不能拒绝关于模型拟合数据很好的假设,即模型很好的拟合了数据。
可以通过调用lackfit选项命令实现
IM指标中比较显著的是AIC和SC,AIC越小标示拟合模型越好,sc是对aic指标的一种修正,与AIC同向作用
2)卡方统计
卡方统计监测的是模型中所包含的自变量对因变量有显著的解释能力,在多元线性回归和ANOVA中,常用F检验达到目的,在logistic中用似然比检验,相当于F检验,在sas输出结果中就是likelihoodratio对应的值,
注:
卡方值和拟合优度是两个完全不同的概念,前者度量的是自变量和因变量的ODDS自然对数线性相关,而后者度量的是预测值和观测值之间的一致性,所以,最好是模型卡方统计性显著而拟合优度统计性不显著。
3)预测准确性
预测准确性问题是:
检验所有x变量到底能解释多少Y变量的波动
RSQUARE:
Y变异中被解释的比例,
C统计量:
度量的是观测值和条件预测概率之间的相对一致性;
指标越高,表示预测概率与观测反应变量之间的关联越密切。
总结如下:
统计量
趋势
作用
sas命令
备注
C统计量
越大越好
度量的是观测值和条件预测概率之间的相对一致性
自动输出
似然比卡方
越大越好
类似于F检验,度量回归平方和,自变量对因变量的显著解释能力
自动输出
P值越小越好
AIC
越小越好
类似于多远回归残差平方和
自动输出
RSQUARE
越大越好
Y变异中被解释的比例
RSQ
HL统计量
越小越好
度量观测值与预测值总体的一致性
LACKFIT
P值越大越好
商业实战中,一般考虑前两种,因为logistic回归是一个分类模型,目标变量的值只是一个分类标示,因而更关注观测值和预测值之间的相对一致性,而不是绝对一致性,因而分析师更关注于模型预测概率值的排序,而lift图也正是从概率排序结果得到的。
应用举例和输出结果的解释
Proclogisticdata=lg.remissiondesc;*按目标变量降序输入建模数据集
modelremiss=cellsmearinfilliblasttemp
/selection=stepwise
slentry=0.3slstay=0.35detailslackfitstb;*设置进入阈值和保留阈值,并输出详细结果,输出HL统计量,输出标准化数
据后的模型参数
outputout=predp=phat;*设置预测概率变量为phat
Run;
在输出结果associationofpredictedprobabilitiesandobservedresponses中最后一列的C统计量,一般大于0.7以上就可以用该模型
《SAS编程与数据挖掘商业案例》学习笔记之十九
(2013-08-2323:
12:
17)
转载▼
标签:
数据挖掘
数据处理
正则表达式
sas编程
sas
分类:
SAS编程
继续《SAS编程与数据挖掘商业案例》学习笔记,本文侧重数据处理实践,包括:
HASH对象、自定义format、以及功能强大的正则表达式
一:
HASH对象
Hash对象又称散列表,是根据关键码值而直接进行访问的数据结构,是根据关键码值而直接进行访问的数据结构,
sas提供了两个类来处理哈希表,用于存储数据的hash和用于遍历的hiter,hash类提供了查找、添加、修改、删除等方法,hiter提供了用于定位和遍历的first、next等方法。
优点:
键值的查找是在内存中进行的,有利于提高性能;
hash表可以在数据步运行时,动态的添加更新或删除观测;
hash表中可以很快的定位数据,减少查找次数;
常用方法:
definekey:
定义键
Definedata:
定义值
definedone:
定义完成,可以载入数据
add:
添加键值,如在hash表中已存在,则忽略;
replace:
如果健在hash表中存在,则替换,如果不存在则添加键值
remove:
清除键值对
find:
查找健值,如果存在则将值写入对应变量
check:
查找键值,如果存在则返回rc=0,不修改当前变量的值;
output:
将hash表输出到数据集
clear:
清空hash表,但并不删除对象
equal:
判断两个hash类是否相等
find方法的示例:
libnamechapt12'f:
\data_model\book_data\chapt12';
dataresults;
if_n_=0thensetchapt12.participants;
if_n_=1thendo;
declarehashh(dataset:
'chapt12.participants');
h.definekey('name');
h.definedata('gender','treatment');
h.definedone();
end;
setchapt12.weight;
ifh.find()=0then
output;
run;
hiter对象的引例:
datapatients;
lengthpatient_id$16discharge8;
inputpatient_iddischarge:
date9.;
datalines;
smith-412315mar2004
hagen-283423apr2004
smith-243715jan2004
flinn-294012feb2004
;
data_null_;
if_n_=0thensetpatients;
declarehashht(dataset:
"patients",ordered:
"ascending");
ht.definekey("patient_id");
ht.definedata("patient_id","discharge");
ht.definedone();
declarehiteriter("ht");
rc=iter.first();
dowhile(rc=0);
putpatient_iddischarge:
date9.;
rc=iter.next();
end;
run;
用declarehiteriter("ht");给hash表ht定义了一个遍历器iter,之后调用first方法将遍历器定位到hash表的第一条观测,然后使用next方法遍历hash表中的所有记录并输出。
商业实战-两个数据集的合并:
databoth1(drop=rc);
declarehashplan();
rc=plan.definekey('plan_id');
rc=plan.definedata('plan_desc');
rc=plan.definedone();
dountil(eof1);
setchapt12.plansend=eof1;
rc=plan.add();
end;
dountil(eof2);
setchapt12.membersend=eof2;
callmissing(plan_desc);
rc=plan.find();
output;
end;
stop;
run;
上述程序可以简化为:
databoth2;
lengthplan_id$3plan_des
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SAS 编程 数据 挖掘 学习 帮助 文档