计算变量的熵值。
输入参数: 1、数据集名 2、变量名
输出:1、宏变量:变量名_ent
%macro var_ent(ins,var)/store;
%global %sysfunc(cats(&var,_ent));
/*1 按选择变量汇总*/
proc meansdata=&ins(keep=&var) noprint;
class &var;
var &var;
output out=ent1 n=freq;
run;
/*2 根据频数统计量计算熵*/
data ent2;
retain mot;
set ent1 end=last;
if _type_=0 then mot=freq;
if _type_=1 then class_p=freq/mot;
if class_p then do;
ent=(-1)*log2(class_p);
ent_sum+ent;
end;
if last then call symput("&var"||'_ent',ent_sum);
run;
%mend;