那么这个代码是用于建模初期,你为了大概了解变量的一个基本特征写的,不是最优分组哈,因为这个代码是将变量最多分为12组,分这么多组的原因也是为了更好的观察特征而已啦,你要是觉得太多组,你可以改下树的深度这些调整一下,这里关于变量特征怎么看,我就不说了.....
%macro
zhandapao(data,DVAR,id,dir);
proc datasets lib=work nodetails;
delete
varname_total;
run;
/*建立数值型数据集*/
%let lib=%upcase(%scan(&data.,1,'.'));
%letdname=%upcase(%scan(&data.,2,'.'));
%globalvar_list var_num;
proc sql noprint;
select name,count(*) into :var_list separated by' ',:var_num
from sashelp.VCOLUMN
where left(libname)="&lib."and
left(memname)="&dname."and
type="num"and
lowcase(name)^=lowcase("&DVAR.")
and lowcase(name)^="&id.";
quit;
%put
&var_list.;
/*把数值型变量定义为宏变量*/
%doi=1%to&var_num.;
%letnumvar_name_&i.=%scan(&var_list.,&i.);
%put&numvar_name_1.;
proc split data=&data.splitsize=300
maxbranch=2
MAXDEPTH=5nsurrs=5
assess=lift criterion=gini;
input &&numvar_name_&i./level=interval;
target &DVAR./level=binary;
Score data=&data.out=d_&&numvar_name_&i.;
code file="&dir.treecode_tic_&&numvar_name_&i..sas";
describe file="&dir.treerule_tic_&&numvar_name_&i..txt";
run;
data n_D_&&numvar_name_&i.;
set d_&&numvar_name_&i.;
%include"&dir.treecode_tic_&&numvar_name_&i..sas";
rename p_&DVAR.1=p_&&numvar_name_&i.;
run;
proc sql noprint;
select count(*),max(&&numvar_name_&i.),min(&&numvar_name_&i.)into:total, :max ,:min from n_D_&&numvar_name_&i.;
quit;
data n_D_&&numvar_name_&i.;
set n_D_&&numvar_name_&i.;
if &min.<=&&numvar_name_&i.<=&max.
then flag="no_null";
else flag="null";
run;
proc sql;
select count(*) into:is_null from
n_D_&&numvar_name_&i.;
quit;
%if&is_null.>0%then%do;
proc sql noprint;
select count(*),max(&&numvar_name_&i.),min(&&numvar_name_&i.)into:total,:max ,:min from n_D_&&numvar_name_&i.;
create table total as
select"&&numvar_name_&i."as
varname,
min(&&numvar_name_&i.) as interval_1,
max(&&numvar_name_&i.) as interval_2,
compress(put(min(round(&&numvar_name_&i.,0.0001)),best32.))||'-'||compress(put(max(round(&&numvar_name_&i.,0.0001)),best32.)) as interval,
sum(&DVAR.) as bad_num,
count(*) as total_num,
count(*)/&total.as num_rate,
sum(&DVAR.)/count(*) as bad_rate
from n_D_&&numvar_name_&i.
group by p_&&numvar_name_&i.
union all
select"&&numvar_name_&i."as varname,
-9999as interval_1,
-9999as interval_2,
'null'as interval,
sum(&DVAR.) as bad_num,
count(*) as total_num,
count(*)/&total.as num_rate,
sum(&DVAR.)/count(*) as bad_rate
from n_D_&&numvar_name_&i.(where=(&&numvar_name_&i.=.))
group by p_&&numvar_name_&i.
order by interval_1;
quit;
%end;
%else%do;
proc sql noprint;
select count(*),max(&&numvar_name_&i.),min(&&numvar_name_&i.)into:total,:max ,:min from n_D_&&numvar_name_&i.;
create table total as
select"&&numvar_name_&i."as varname,
min(&&numvar_name_&i.) asninterval_1,
max(&&numvar_name_&i.) as interval_2,
compress(put(min(round(&&numvar_name_&i.,0.0001)),best32.))||'-'||compress(put(max(round(&&numvar_name_&i.,0.0001)),best32.)) as interval,
sum(&DVAR.) as bad_num,
count(*) as total_num,
count(*)/&total.as num_rate,
sum(&DVAR.)/count(*) as bad_rate
from n_D_&&numvar_name_&i.
group by p_&&numvar_name_&i.
order by interval_1;
quit;
%end;
data &&numvar_name_&i.;
set total;
group=_n_;
run;
proc append base=varname_total
data=&&numvar_name_&i.
force;run;
proc datasets lib=work nodetails;
delete total n_: d_:
&&numvar_name_&i.
_namedat;
quit;
%end;
%mend;
解释一下这个代码怎么用,这个宏已经是封装好了的,直接填入参数就可以用了:
zhandapao(data,DVAR,id,dir);
data:填入你的数据集
DVAR:填入你的因变量
id:填入你的数据集的主键
dir:这个你需要填一个路径,是用来放决策树的规则的文件下,决策树的规则文件你看不懂没关系,你填个类似“F/DD”的路径就可以了。
例子:%zhandapao(DD.TEST_DATA,y,CUSTOMER_id,D:test_1);
结果图就是这样子:
那么今天的更新就到这里啦
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
持证人简介:贺渲雯 ,CDA 数据分析师一级持证人,互联网行业数据分析师 今天我将为大家带来一个关于用户私域用户质量数据分析 ...
2025-04-18一、CDA持证人介绍 在数字化浪潮席卷商业领域的当下,数据分析已成为企业发展的关键驱动力。为助力大家深入了解数据分析在电商行 ...
2025-04-17CDA持证人简介:居瑜 ,CDA一级持证人,国企财务经理,13年财务管理运营经验,在数据分析实践方面积累了丰富的行业经验。 一、 ...
2025-04-16持证人简介: CDA持证人刘凌峰,CDA L1持证人,微软认证讲师(MCT)金山办公最有价值专家(KVP),工信部高级项目管理师,拥有 ...
2025-04-15持证人简介:CDA持证人黄葛英,ICF国际教练联盟认证教练,前字节跳动销售主管,拥有丰富的行业经验。在实际生活中,我们可能会 ...
2025-04-14在 Python 编程学习与实践中,Anaconda 是一款极为重要的工具。它作为一个开源的 Python 发行版本,集成了众多常用的科学计算库 ...
2025-04-14随着大数据时代的深入发展,数据运营成为企业不可或缺的岗位之一。这个职位的核心是通过收集、整理和分析数据,帮助企业做出科 ...
2025-04-11持证人简介:CDA持证人黄葛英,ICF国际教练联盟认证教练,前字节跳动销售主管,拥有丰富的行业经验。 本次分享我将以教培行业为 ...
2025-04-11近日《2025中国城市长租市场发展蓝皮书》(下称《蓝皮书》)正式发布。《蓝皮书》指出,当前我国城市住房正经历从“增量扩张”向 ...
2025-04-10在数字化时代的浪潮中,数据已经成为企业决策和运营的核心。每一位客户,每一次交易,都承载着丰富的信息和价值。 如何在海量客 ...
2025-04-09数据是数字化的基础。随着工业4.0的推进,企业生产运作过程中的在线数据变得更加丰富;而互联网、新零售等C端应用的丰富多彩,产 ...
2025-04-094月7日,美国关税政策对全球金融市场的冲击仍在肆虐,周一亚市早盘,美股股指、原油期货、加密货币、贵金属等资产齐齐重挫,市场 ...
2025-04-08背景 3月26日,科技圈迎来一则重磅消息,苹果公司宣布向浙江大学捐赠 3000 万元人民币,用于支持编程教育。 这一举措并非偶然, ...
2025-04-07在当今数据驱动的时代,数据分析能力备受青睐,数据分析能力频繁出现在岗位需求的描述中,不分岗位的任职要求中,会特意标出“熟 ...
2025-04-03在当今数字化时代,数据分析师的重要性与日俱增。但许多人在踏上这条职业道路时,往往充满疑惑: 如何成为一名数据分析师?成为 ...
2025-04-02最近我发现一个绝招,用DeepSeek AI处理Excel数据简直太爽了!处理速度嘎嘎快! 平常一整天的表格处理工作,现在只要三步就能搞 ...
2025-04-01你是否被统计学复杂的理论和晦涩的公式劝退过?别担心,“山有木兮:统计学极简入门(Python)” 将为你一一化解这些难题。课程 ...
2025-03-31在电商、零售、甚至内容付费业务中,你真的了解你的客户吗? 有些客户下了一两次单就消失了,有些人每个月都回购,有些人曾经是 ...
2025-03-31在数字化浪潮中,数据驱动决策已成为企业发展的核心竞争力,数据分析人才的需求持续飙升。世界经济论坛发布的《未来就业报告》, ...
2025-03-28你有没有遇到过这样的情况?流量进来了,转化率却不高,辛辛苦苦拉来的用户,最后大部分都悄无声息地离开了,这时候漏斗分析就非 ...
2025-03-27