计算字符型变量的信息熵——macro-经管之家官网!

人大经济论坛-经管之家 收藏本站
您当前的位置> 考研考博>>

考研

>>

计算字符型变量的信息熵——macro

计算字符型变量的信息熵——macro

发布:intheangel | 分类:考研

关于本站

人大经济论坛-经管之家:分享大学、考研、论文、会计、留学、数据、经济学、金融学、管理学、统计学、博弈论、统计年鉴、行业分析包括等相关资源。
经管之家是国内活跃的在线教育咨询平台!

获取电子版《CDA一级教材》

完整电子版已上线CDA网校,累计已有10万+在读~ 教材严格按考试大纲编写,适合CDA考生备考,也适合业务及数据分析岗位的从业者提升自我。

完整电子版已上线CDA网校,累计已有10万+在读~ 教材严格按考试大纲编写,适合CDA考生备考,也适合业务及数据分析岗位的从业者提升自我。

有空写了一个宏,可以直接计算字符型变量的信息熵;raw_data是原始数据集,destination是分类变量;关于数值型变量的信息熵算法有空继续;%macroentropy(row_data,destination);proccontentsdata=&row_data(drop= ...
坛友互助群


扫码加入各岗位、行业、专业交流群


有空写了一个宏,可以直接计算字符型变量的信息熵;
raw_data是原始数据集,destination是分类变量;
关于数值型变量的信息熵算法有空继续;
  1. %macro entropy(row_data,destination);

  2. proc contents data=&row_data(drop=&destination) noprint out=var_list;run;

  3. data var_cha_list;
  4. set var_list;
  5. where type=2;
  6. keep name;
  7. run;

  8. /*first we need to get the character variable which we can calculate the entropy*/

  9. %if %sysfunc(exist(var_cha_list)) ne 0 %then %do;
  10. proc datasets lib=work nolist;
  11. delete entropy_variable;
  12. quit;

  13. data entropy_variable;
  14. length variable $40 entropy 8;
  15. stop;
  16. run;
  17. %end;

  18. /*create the table entropy_variable to store the results*/

  19. %let dsid = %sysfunc(open(var_cha_list));
  20. %if &dsid gt 0 %then %do;
  21. %let nobs = %sysfunc(attrn(&dsid,nobs));
  22. %do i=1 %to &nobs;/*start resolve this question, get the answers*/
  23. %let rc = %sysfunc(fetch(&dsid,&i));
  24. %let varnume = %sysfunc(varnum(&dsid,name));
  25. %let variable = %sysfunc(getvarc(&dsid,&varnume));
  26. ods html close;
  27. ods output
  28. CrossTabFreqs=pro;
  29. proc freq data=&row_data;
  30. table &variable * &destination;
  31. run;
  32. ods output close;
  33. ods html;

  34. /*use the freq proc to summary the data we need*/

  35. data pro_temp(keep=&variable percent);
  36. set pro(keep=&variable percent &destination);
  37. where &destination='' and &variable^='';
  38. run;

  39. data pro_temp_2(keep=&variable rowpercent);
  40. set pro(keep=&variable rowpercent &destination);
  41. where &destination^='' and &variable^='';
  42. run;

  43. proc sql;
  44. create table final as
  45. select * from pro_temp as a
  46. inner join pro_temp_2 as b
  47. on a.&variable.=b.&variable.;
  48. quit;

  49. /*organize the data so we can use it directly*/

  50. data final;
  51. set final;
  52. retain entropy 0;
  53. if rowpercent^=0 and rowpercent^=100 then
  54. entropy=entropy+rowpercent/100*log2(rowpercent/100)*percent/100;
  55. else entropy=entropy;
  56. run;

  57. /*calculate the entropy*/

  58. data entropy_&variable(keep=variable entropy);
  59. retain variable;
  60. set final end=eof;
  61. variable="&variable";
  62. entropy=-entropy;
  63. if eof=1;
  64. run;

  65. proc append base=entropy_variable data=entropy_&variable force;run; /*get all the answer together*/
  66. %end;
  67. %let dsid = %sysfunc(close(&dsid));
  68. %end;

  69. /*Worte by Albert.feng , if you use this code please note.*/
  70. %mend entropy;

  71. %entropy(c,play_golf);
复制代码
扫码或添加微信号:坛友素质互助


「经管之家」APP:经管人学习、答疑、交友,就上经管之家!
免流量费下载资料----在经管之家app可以下载论坛上的所有资源,并且不额外收取下载高峰期的论坛币。
涵盖所有经管领域的优秀内容----覆盖经济、管理、金融投资、计量统计、数据分析、国贸、财会等专业的学习宝库,各类资料应有尽有。
来自五湖四海的经管达人----已经有上千万的经管人来到这里,你可以找到任何学科方向、有共同话题的朋友。
经管之家(原人大经济论坛),跨越高校的围墙,带你走进经管知识的新世界。
扫描下方二维码下载并注册APP
本文关键词:

本文论坛网址:https://bbs.pinggu.org/thread-3103519-1-1.html

人气文章

1.凡人大经济论坛-经管之家转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
数据分析师 人大经济论坛 大学 专业 手机版
联系客服
值班时间:工作日(9:00--18:00)