楼主: yangponingsui
20464 7

[原创博文] Topsis综合分析方法的原理 [推广有奖]

  • 0关注
  • 1粉丝

大专生

71%

还不是VIP/贵宾

-

威望
0
论坛币
17 个
通用积分
0.1204
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
179 点
帖子
51
精华
0
在线时间
50 小时
注册时间
2006-5-18
最后登录
2014-5-5

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
【摘要】    目的:介绍Topsis综合分析方法的原理,改进Topsis法的SAS程序,使之更方便实用,并能实现加权Topsis法的运算。方法:利用SAS宏语言编写宏程序实现自动运算。结果:通过实例检验,改进的SAS程序可以完成Topsis法的综合评价。结论:改进的SAS程序结果正确,简单实用。
【关键词】  Topsis法 SAS 宏 程序
  Topsis法是technique for order preference by similarity to ideal solution的缩写,意为与理想方案相似性的顺序选优技术,是系统工程中有限方案多目标决策分析的一种常用方法,可用于效益评价、卫生决策和卫生事业管理等多个领域[1]。此方法对样本量、指标多少及数据的分布无特殊要求和限制,灵活、方便、实用。但目前几种常用的统计软件包并没有提供现成的计算机程序,而现有已发表的关于Topsis法的SAS程序在应用于不同数据时,需要做较多修改,并且不能进行加权Topsis法的运算。本研究就Topsis法综合分析的SAS程序做了进一步的改进,使之更简单实用,以满足实际工作的需要。
  1  原理与方法
   
  基于归一化后的原始数据矩阵,找出有限方案中的最优方案和最劣方案构成一个空间:待评价的某方案可视为该空间上的一个点,据此可获得该点与最优方案和最劣方案问的距离(常用欧氏距离(Euclidean distance)),从而得出该方案与最优方案的相对接近程度,借此可进行方案优劣的评价[1]。其原理和方法如下:
   
  ① 同趋势化:通常采用低优指标转换为高优指标的方式,可采用倒数法和差值法。
   
  ② 无量纲化:为了消除计量单位的影响,需要做归一化处理。设(xij)n×m为同趋化后的指标矩阵,aij=xij/ ni=1 x2ij,j=1,2,…,m,建立则归一化矩阵(aij)n×m。
   
  ③ 求有限方案中的最优方案A+和最劣方案A- 。最优方案为:A+=(ai1+ ,ai2+ ,… ,aim+),最劣方案为:A-=(ai1- ,ai2- ,… ,aim-)。
   
  ④ 分别计算诸评价对象各指标值与最优方案及最劣方案的距离,通常采用欧氏距离。
   
  D+i=mj=1(aij-a+ij)2,  D-i=mj=1(aij-a-ij)2
   
  ⑤ 计算诸评价对象与最优方案的相对接近程度Ci。
   
  Ci=D-i / (D-i+D+i)
  2  实例分析与SAS宏程序
   
  以中文版SF-36为健康调查问卷,于2004年7月~2004年12月间对≥60岁老年人(602人)进行老年人生存质量(QOL)的研究,问卷包含8个领域的指标,分别为x1(生理机能)、x2(生理职能)、x3(躯体疼痛)、x4(一般健康状况)、x5(精力)、x6(社会功能)、x7(情感职能)、x8(精神健康)[2]。得到数据如下:
  表1  7个地区老年人QOL各领域平均分(略)
  以下是宏程序:
  %macro topsis(data_name=,var_name=,var_keep=&var_name,weight=0);
   
  %let i=1;
   
  %let var&i=%scan(&var_name,&i,' ');
   
  %do %until (&&var&i=);
      
  %let i=%eval(&i+1);
  
  %let var&i=%scan(&var_name,&i,' ');
   
  %end;
   
  %let var_num=%eval(&i-1); *自变量个数;
   
  *top_1为原始数据,top_2为权重数据。必须把权重数据放在最后一行;
   
  %if &weight=1 %then %do;
         
  data top_1 top_2;
            
  set &data_name end=last;
            
  if last then output top_2;
            
  else output top_1;
         
  run;%end;
      
  %else %do;
         
  data top_1;
            
  set &data_name;
         
  data top_2;
            
  %do i=1 %to &var_num;
               
  &&var&i=1;
            
  %end;
         
  run;%end;
   
  data _null_;*样本个数;
      
  set top_1 end=last;
      
  if last then call symput('obj_num',compress(_n_));
   
  %let sqr_str=;
   
  data top_a; *求各指标值的平方;
      
  set top_1 end=last;
      
  %do i=1 %to &var_num;
         
  &&var&i.._2=&&var&i ** 2;
         
  %let sqr_str=&sqr_str &&var&i.._2;%end;
   
  proc transpose data=top_a(keep=&sqr_str)prefix=top_m out=top_b; *对平方值矩阵转置;
   
  proc transpose data=top_a(keep=&var_name)prefix=top_n out=top_C; *对原始数据矩阵转置;
   
  proc transpose data=top_2(keep=&var_name)prefix=top_w out=top_w; *对权重数据矩阵转置;
   
  data top_d; *求各指标值的平方和;
      
  set top_b;
      
  z=sum(of top_m1-top_m&obj_num);
   
  %let min_str=;%let max_str=;
   
  data top_e;
      
  merge top_c top_d top_w;  
      
  %do i=1 %to &obj_num; *求归一化矩阵的转置矩阵;
         
  z&i=top_n&i/sqrt(z);%end;
      
  max=max(of z1-z&obj_num); *求最优方案和最劣方案;
      
  min=min(of z1-z&obj_num);
      
  %do i=1 %to &obj_num;
         
  d_max&i=top_w1*(z&i-max)**2;
         
  d_min&i=top_w1*(z&i-min)**2;
         
  %let max_str=&max_str d_max&i;
         
  %let min_str=&min_str d_min&i;%end;
   
  proc transpose data=top_e(keep=&max_str) prefix=max out=top_f;
   
  proc transpose data=top_e(keep=&min_str) prefix=min out=top_g;*求各评价对象与最优方案的相对接近程度C,并排序;
   
  data top_h(keep=&var_keep d_max d_min c);
      
  merge top_1 top_f top_g ;
      
  max_sum=sum(of max1-max&var_num);
      
  min_sum=sum(of min1-min&var_num);
      
  d_max=sqrt(max_sum);
      
  d_min=sqrt(min_sum);
      
  C=d_min/(d_max+d_min);
   
  proc rank data=top_h descending out=topsis_result;
      
  ranks order;
      
  var c;
   
  proc print;run ;
  %mend topsis;
     
  设数据集名为topsis,地区变量名为city,var_keep为需要打印出的变量,weight为是否进行加权Topsis法运算,默认为0(否)。运行宏程序如下:
  %topsis(data_name=topsis,var_name=x1 x2 x3 x4 x5 x6 x7 x8,var_keep=city,weight=0);
   
  运行结果如下:
  Obs CITY d_maxd_minCorder1长沙0.186680.161690.4641442苏州0.178900.115590.3925173沈阳0.195440.142200.4211564广州
  0.128570.175710.5774625成都0.093750.238970.7182316天津0.205630.164550.4445157上海0.144700.194060.572863
  3  讨论
   
  Topsis法对原始数据进行同趋势和归一化处理,从同一指标与最优指标的距离之比计算中体现出同一指标间的接近度,这在一定程度上反映了散程度,排序结果充分利用原始数据信息,能定量反映不同评价单元的优劣程度,直观、可靠。
   
  相对于之前已发表的Topsis法的SAS程序[3,4],本程序的特点是对不同的数据,只需做最少的修改(数据集名称和变量名)即可完成Topsis法的运算。另外,本程序还能进行加权Topsis法的运算。确定权重的常用方法有专家评价法、因子分析法、模糊综合评价的逆估计法、统计计算法等。只需将确定的权重加入到数据集的最后一行,并将参数weight=1即可完成加权Topsis法的评价。
【参考文献】
   1 孙振球.医学统计学.北京:人民卫生出版社,2005,7,514~515.
  2 韦懿芸,颜艳,胡宇峰,等.TOPSIS法和秩和比法相结合综合评价城市老年人生存质量.中国老年学杂志,2006,26:440~441.
  3 王一任,孙振球,黄正南.应用SAS软件进行Topsis法分析.中国卫生统计,2003,20(2):119~121.
  4 孙付胜,刘言训,吕翠霞,张兴旭,刘增法.Topsis法的SAS程序探讨.中国医院统计,2006,13(3):232~233.
  5 薛富波,张文彤,田晓燕. SAS 8.2 统计应用教程.北京希望电子出版社, 2004,8.
二维码

扫码加我 拉你入群

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

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

关键词:topsis 综合分析 分析方法 Tops SIS solution 系统工程 关键词 程序 技术

沙发
huntwind 发表于 2010-7-30 20:17:48 |只看作者 |坛友微信交流群
好像很有意思...有原文吗

使用道具

赞一个!

使用道具

板凳
yuwenhuajiayou 学生认证  发表于 2014-10-7 18:01:12 |只看作者 |坛友微信交流群
程序为何出错呢??没法用啊!楼主

使用道具

报纸
Mr.stupid 发表于 2017-8-3 11:24:32 |只看作者 |坛友微信交流群
请问如果某个方案里,左右指标都是最小的,那算出来的结果不都是0嘛?????结果可以为0吗?

使用道具

地板
Mr.stupid 发表于 2017-8-3 11:24:50 |只看作者 |坛友微信交流群
Mr.stupid 发表于 2017-8-3 11:24
请问如果某个方案里,左右指标都是最小的,那算出来的结果不都是0嘛?????结果可以为0吗?
所有指标都是最小的

使用道具

7
流年敲打 发表于 2017-9-26 10:38:21 |只看作者 |坛友微信交流群
Mr.stupid 发表于 2017-8-3 11:24
请问如果某个方案里,左右指标都是最小的,那算出来的结果不都是0嘛?????结果可以为0吗?
不要假设 要实证 有这样的例子否?

使用道具

8
汇通天下520 发表于 2018-12-7 09:58:04 |只看作者 |坛友微信交流群
请问楼主,按照你的程序,运行出现错误,%else%end,下面是不是缺少语句,有同学知道吗? 图片2.png 图片1.png

使用道具

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

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

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

GMT+8, 2024-4-23 19:05