全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1491 1
2016-06-23

计算变量的熵值。
输入参数: 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;


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2016-6-26 13:33:38
ent=(-1)*log2(class_p); 这个公式少乘了一个概率,应该为:
ent=(-1)*class_p*log2(class_p);
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群