
SAS—基于熵的連續(xù)變量的離散化
今天介紹下整個程序邏輯及sas代碼的詳細介紹。
首先宏 %BinContVard調(diào)用了宏%CandSplits;然后宏%CandSplits又調(diào)用宏
%BestSplit、%GValue;最后通過宏%ApplyMap應(yīng)用于數(shù)據(jù)集。
下表是%BinContVar的參數(shù)
%BinContVar(Dsin,IVVar,DVVar,MMax,Acc,DsVarMap)
參數(shù)
描述
DSin
輸入數(shù)據(jù)集
IVVar
連續(xù)自變量
DVVar
二元因變量
MMax
設(shè)定的分組數(shù)量
Acc
最小分段的百分比規(guī)模
DsVarMap
包含映射規(guī)則的輸出數(shù)據(jù)集
首先,將初始數(shù)據(jù)集等距分為10段,然后把這些段數(shù)看作名義變量,基于熵方差利用最優(yōu)二元分類法找出最優(yōu)分群。
宏%bincontvar的主要是作用是連續(xù)變量的最優(yōu)分段,嵌套了%CandSplits,這個宏的作用是對分段后的數(shù)據(jù)集在進行分群,并選出最優(yōu)分群;宏%CandSplits嵌套了%BestSplits和%GValue兩個宏:宏%BestSplits是找出最優(yōu)分群,宏%GValue計算熵方差。
/*連續(xù)變量的最優(yōu)分段*/
/*
1.找出連續(xù)變量的最大最小值;
2.對連續(xù)變量進行等距分段,并把這些段數(shù)看成名義變量;
3.對2所分段數(shù)進行最優(yōu)分群,直到所設(shè)置的分群數(shù)
*/
%macro BinContVar(DSin, IVVar, DVVar, MMax, Acc, DSVarMap);
%local VarMax VarMin;
proc sql noprint;
select min(&IVVar), max(&IVVar) into :VarMin, :VarMax from &DSin;
quit;
%local Mbins i MinBinSize;
%let Mbins=%sysfunc(int(%sysevalf(1.0/&Acc)));/*設(shè)置等距分段數(shù)*/
%let MinBinSize=%sysevalf((&VarMax-&VarMin)/&Mbins);/*每段的長度*/
/*定義每段后每段的最大最小值*/
%do i=1 %to %eval(&Mbins);
%local Lower_&i Upper_&i;
%let Upper_&i = %sysevalf(&VarMin + &i * &MinBinSize);
%let Lower_&i = %sysevalf(&VarMin + (&i-1)*&MinBinSize);
%end;
%let Lower_1 = %sysevalf(&VarMin-0.0001);
%let Upper_&Mbins=%sysevalf(&VarMax+0.0001);
/*對連續(xù)變量 income 進行等距分段*/
data Temp_DS;
set &DSin;
%do i=1 %to %eval(&Mbins-1);
if &IVVar>=&&Lower_&i and &IVVar < &&Upper_&i Then Bin=&i;
%end;
if &IVVar>=&&Lower_&Mbins and &IVVar <= &&Upper_&MBins Then Bin=&MBins;
run;
/*計算出等距分段的每段最值*/
data temp_blimits;
%do i=1 %to %Eval(&Mbins-1);
Bin_LowerLimit=&&Lower_&i;
Bin_UpperLimit=&&Upper_&i;
Bin=&i;
output;
%end;
Bin_LowerLimit=&&Lower_&Mbins;
Bin_UpperLimit=&&Upper_&Mbins;
Bin=&Mbins;
output;
run;
proc sort data=temp_blimits;
by Bin;
run;
/*找出每段分段對應(yīng)的二元自變量每個類別的頻數(shù)*/
proc freq data=Temp_DS noprint;
table Bin*&DVvar /out=Temp_cross;
table Bin /out=Temp_binTot;
run;
proc sort data=temp_cross;
by Bin;
run;
proc sort data= temp_BinTot;
by Bin;
run;
data temp_cont;
merge Temp_cross(rename=count=Ni2 )temp_BinTot(rename=Count=total) temp_BLimits ;/*Ni2:每個分段下對應(yīng)類別的頻數(shù) total:每個分段下的總頻數(shù)*/
by Bin;
Ni1=total-Ni2;
PDV1=bin;
label Ni2= total=;
if Ni1=0 then output;
else if &DVVar=1 then output;
drop percent &DVVar;
run;
data temp_contold;
set temp_cont;
run;
/*合并所有含有ni1、ni2 、total= 0 的分段*/
proc sql noprint;
%local mx;
%do i=1 %to &Mbins;
select count(*) into : mx from Temp_cont where Bin=&i;
%if (&mx>0) %then %do;
select Ni1, Ni2, total, bin_lowerlimit, bin_upperlimit into
:Ni1,:Ni2,:total, :bin_lower, :bin_upper
from temp_cont where Bin=&i;
%if (&i=&Mbins) %then %do;
select max(bin) into :i1 from temp_cont where Bin<&Mbins;
%end;
%else %do;
select min(bin) into :i1 from temp_cont where Bin>&i;
%end;
%if (&Ni1=0) or (&Ni2=0) or (&total=0) %then %do;
update temp_cont set
Ni1=Ni1+&Ni1 ,
Ni2=Ni2+&Ni2 ,
total=total+&Total
where bin=&i1;
%if (&i<&Mbins) %then %do;
update temp_cont set Bin_lowerlimit = &Bin_lower where bin=&i1;
%end;
%else %do;
update temp_cont set Bin_upperlimit = &Bin_upper where bin=&i1;
%end;
delete from temp_cont where bin=&i;
%end;
%end;
%end;
quit;
proc sort data=temp_cont;
by pdv1;
run;
%local m;
/*將所有類別定義為宏變量m*/
data temp_cont;
set temp_cont;
i=_N_;
Var=bin;
Bin=1;
call symput("m", compress(_N_));
run;
%local Nbins ;
%let Nbins=1;
%DO %WHILE (&Nbins <&MMax);
/*從所有候選分群中根據(jù)熵選擇最優(yōu)分群*/
%CandSplits(temp_cont, Temp_Splits);
Data Temp_Cont;
set Temp_Splits;
run;
%let NBins=%eval(&NBins+1);
%end;
data temp_Map1 ;
set temp_cont(Rename=Var=OldBin);
drop Ni2 PDV1 Ni1 i ;
run;
proc sort data=temp_Map1;
by Bin OldBin ;
run;
data temp_Map2;
retain LL 0 UL 0 BinTotal 0;
set temp_Map1;
by Bin OldBin;
Bintotal=BinTotal+Total;
if first.bin then do;
LL=Bin_LowerLimit;
BinTotal=Total;
End;
if last.bin then do;
UL=Bin_UpperLimit;
output;
end;
drop Bin_lowerLimit Bin_upperLimit Bin OldBin total;
proc sort data=temp_map2;
by LL;
run;
data &DSVarMap;
set temp_map2;
Bin=_N_;
run;
%mend;
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
左偏態(tài)分布轉(zhuǎn)正態(tài)分布:方法、原理與實踐 左偏態(tài)分布轉(zhuǎn)正態(tài)分布:方法、原理與實踐 在統(tǒng)計分析、數(shù)據(jù)建模和科學(xué)研究中,正態(tài)分 ...
2025-07-21CDA 數(shù)據(jù)分析師的職業(yè)生涯規(guī)劃:從入門到卓越的成長之路 在數(shù)字經(jīng)濟蓬勃發(fā)展的當下,數(shù)據(jù)已成為企業(yè)核心競爭力的重要來源,而 CD ...
2025-07-21MySQL執(zhí)行計劃中rows的計算邏輯:從原理到實踐 MySQL 執(zhí)行計劃中 rows 的計算邏輯:從原理到實踐 在 MySQL 數(shù)據(jù)庫的查詢優(yōu)化中 ...
2025-07-21在AI滲透率超85%的2025年,企業(yè)生存之戰(zhàn)就是數(shù)據(jù)之戰(zhàn),CDA認證已成為決定企業(yè)存續(xù)的生死線!據(jù)麥肯錫全球研究院數(shù)據(jù)顯示,AI驅(qū) ...
2025-07-2035歲焦慮像一把高懸的利刃,裁員潮、晉升無望、技能過時……當職場中年危機與數(shù)字化浪潮正面交鋒,你是否發(fā)現(xiàn): 簡歷投了10 ...
2025-07-20CDA 數(shù)據(jù)分析師報考條件詳解與準備指南? ? 在數(shù)據(jù)驅(qū)動決策的時代浪潮下,CDA 數(shù)據(jù)分析師認證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-18剛?cè)肼殘龌蚴窃诼殘稣媾R崗位替代、技能更新、人機協(xié)作等焦慮的打工人,想要找到一條破解職場焦慮和升職瓶頸的系統(tǒng)化學(xué)習(xí)提升 ...
2025-07-182025被稱為“AI元年”,而AI,與數(shù)據(jù)密不可分。網(wǎng)易公司創(chuàng)始人丁磊在《AI思維:從數(shù)據(jù)中創(chuàng)造價值的煉金術(shù) ...
2025-07-18CDA 數(shù)據(jù)分析師:數(shù)據(jù)時代的價值挖掘者 在大數(shù)據(jù)席卷全球的今天,數(shù)據(jù)已成為企業(yè)核心競爭力的重要組成部分。從海量數(shù)據(jù)中提取有 ...
2025-07-18SPSS 賦值后數(shù)據(jù)不顯示?原因排查與解決指南? 在 SPSS( Statistical Package for the Social Sciences)數(shù)據(jù)分析過程中,變量 ...
2025-07-18在 DBeaver 中利用 MySQL 實現(xiàn)表數(shù)據(jù)同步操作指南? ? 在數(shù)據(jù)庫管理工作中,將一張表的數(shù)據(jù)同步到另一張表是常見需求,這有助于 ...
2025-07-18數(shù)據(jù)分析師的技能圖譜:從數(shù)據(jù)到價值的橋梁? 在數(shù)據(jù)驅(qū)動決策的時代,數(shù)據(jù)分析師如同 “數(shù)據(jù)翻譯官”,將冰冷的數(shù)字轉(zhuǎn)化為清晰的 ...
2025-07-17Pandas 寫入指定行數(shù)據(jù):數(shù)據(jù)精細化管理的核心技能? 在數(shù)據(jù)處理的日常工作中,我們常常需要面對這樣的場景:在龐大的數(shù)據(jù)集里精 ...
2025-07-17解碼 CDA:數(shù)據(jù)時代的通行證? 在數(shù)字化浪潮席卷全球的今天,當企業(yè)決策者盯著屏幕上跳動的數(shù)據(jù)曲線尋找增長密碼,當科研人員在 ...
2025-07-17CDA 精益業(yè)務(wù)數(shù)據(jù)分析:數(shù)據(jù)驅(qū)動業(yè)務(wù)增長的實戰(zhàn)方法論 在企業(yè)數(shù)字化轉(zhuǎn)型的浪潮中,“數(shù)據(jù)分析” 已從 “加分項” 成為 “必修課 ...
2025-07-16MySQL 中 ADD KEY 與 ADD INDEX 詳解:用法、差異與優(yōu)化實踐 在 MySQL 數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計中,索引是提升查詢性能的核心手段。無論 ...
2025-07-16解析 MySQL Update 語句中 “query end” 狀態(tài):含義、成因與優(yōu)化指南? 在 MySQL 數(shù)據(jù)庫的日常運維與開發(fā)中,開發(fā)者和 DBA 常會 ...
2025-07-16如何考取數(shù)據(jù)分析師證書:以 CDA 為例? ? 在數(shù)字化浪潮席卷各行各業(yè)的當下,數(shù)據(jù)分析師已然成為企業(yè)挖掘數(shù)據(jù)價值、驅(qū)動決策的 ...
2025-07-15CDA 精益業(yè)務(wù)數(shù)據(jù)分析:驅(qū)動企業(yè)高效決策的核心引擎? 在數(shù)字經(jīng)濟時代,企業(yè)面臨著前所未有的數(shù)據(jù)洪流,如何從海量數(shù)據(jù)中提取有 ...
2025-07-15MySQL 無外鍵關(guān)聯(lián)表的 JOIN 實戰(zhàn):數(shù)據(jù)整合的靈活之道? 在 MySQL 數(shù)據(jù)庫的日常操作中,我們經(jīng)常會遇到需要整合多張表數(shù)據(jù)的場景 ...
2025-07-15