楼主: yukai08008
1339 1

[学习分享] 变量熵计算SAS宏代码_Andy的原创帖16 [推广有奖]

  • 2关注
  • 17粉丝

讲师

2%

还不是VIP/贵宾

-

威望
0
论坛币
2176 个
通用积分
3.0600
学术水平
10 点
热心指数
7 点
信用等级
7 点
经验
5915 点
帖子
120
精华
0
在线时间
556 小时
注册时间
2012-11-28
最后登录
2022-4-11

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

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


二维码

扫码加我 拉你入群

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

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

关键词:Andy SAS宏 sysfunc output Global store 统计

沙发
yukai08008 在职认证  发表于 2016-6-26 13:33:38 |只看作者 |坛友微信交流群
ent=(-1)*log2(class_p); 这个公式少乘了一个概率,应该为:
ent=(-1)*class_p*log2(class_p);

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-24 17:47