请选择 进入手机版 | 继续访问电脑版
楼主: laven8
3311 2

[程序分享] 数据包络分析的SAS实现初探 [推广有奖]

  • 0关注
  • 1粉丝

硕士生

7%

还不是VIP/贵宾

-

威望
0
论坛币
844 个
通用积分
0
学术水平
6 点
热心指数
11 点
信用等级
6 点
经验
391 点
帖子
11
精华
0
在线时间
259 小时
注册时间
2011-4-8
最后登录
2024-2-7

laven8 学生认证  发表于 2015-1-22 21:26:02 |显示全部楼层 |坛友微信交流群

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

    数据包络分析的SAS实现初探


    数据包络分析法(DEA, data envelopment analysis)由Charnes、Cooper和Rhodes在1978年首次提出,以相对效率概念为基础,根据多指标投入和多指标产出,用来评价相同类型部门或单位中各成员之间的相对有效性。国外开发的DEA软件较多,国内则较少,一方面是因为国内知识产权保护力度不够,另一方面相关应用研究一般落后于国外步伐。目前有相关的DEA求解软件如DEA Solver pro、DEAP、DEA Excel Solver、MaxDEA等。之前笔者也觉得DEA EXCEL等方便使用,后来用Matlab编码更能体现自己的模型。学习SAS后,发现其实SAS也是可以解决DEA问题的。现通过某数据来做个实例初探。以下为7个决策单元,前4个为输入变量,后3个为输出变量。
   
CITY青岛东营烟台潍坊威海日照滨州
CoalUse

0.71

0.76

0.69

1.02

0.79

1.84

1.05

ElecUse

495.44

695.85

673.95

967.21

436.18

1219.84

1040.84

HumanCap

547.60

126.00

434.10

513.50

173.30

182.50

250.40

FinanCap

658.06

179.80

407.53

358.26

200.59

124.35

201.17

CV1

306.38

99.18

361.43

359.28

171.18

112.08

178.07

CV2

1828.97

1914.81

2830.88

1961.40

1139.36

660.66

972.29

CV3

2339.46

662.36

1714.52

1221.16

800.41

441.33

667.22



编写的matlab程序如下
  1. %CCR模型加入松弛变量后的模型D
  2. clear
  3. X=xlsread('E:\ago\test1',4,'B2:H5'); %用户输入多指标输入矩阵X
  4. Y=xlsread('E:\ago\test1',4,'B6:H8'); %用户输入多指标输出矩阵Y
  5. n=size(X',1);m=size(X,1);s=size(Y,1);
  6. epsilon=10^-10;  %定义非阿基米德无穷小量epsilon
  7. f=[zeros(1,n) -epsilon*ones(1,m+s) 1];
  8. A=zeros(1,n+m+s+1);b=0
  9. LB=zeros(n+m+s+1,1);UB=[];
  10. LB(n+m+s+1)=-Inf;
  11. for i=1:n;
  12.     Aeq=[X eye(m) zeros(m,s) -X(:,i)
  13.         Y zeros(s,m) -eye(s) zeros(s,1)];
  14.     beq=[zeros(m,1)
  15.         Y(:,i)];
  16.     w(:,i)=linprog(f,A,b,Aeq,beq,LB,UB); %解线性规划,得DMUi的最佳权向量wi
  17.       E(i,i)=Y(:,i)'*w(m+1:m+s,i);       %求出DMUi的相对效率值Eii
  18. end
  19. w   %输出最佳权向量
  20. lambda=w(1:n,:)   %输出lampda*
  21. s_minus=w(n+1:n+m,:)   %输出s*_minus
  22. s_plus=w(n+m+1:n+m+s,:)  %输出s*_plus
  23. theta=w(n+m+s+1,:)       %输出theta*
复制代码
matlab输出结果theta =
    1.0000    1.0000    1.0000    1.0000    1.0000    0.9458    0.9285
我们可以发现最后两个决策单元日照和滨州是无效率的。但是这一编程确实有些繁琐。我们可以通过一段SAS程序来直接求解某个决策单元的theta值。
编写的SAS程序如下:
  1. data dea;                                                                                                                              
  2. input _id_ $ x1-x7 c s1 s2 s3 s4 s5 s6 s7 _type_ $ _rhs_;                                                                              
  3. cards;                                                                                                                                 
  4. object . . . . . . . 1 -1E-6 -1E-6 -1E-6 -1E-6 -1E-6 -1E-6 -1E-6 min .                                                                  
  5. CoalUse      0.71       0.76       0.69       1.02       0.79       1.84       1.05      -1.05     1 . . . . . . eq 0                  
  6. ElecUse      495.44     695.85     673.95     967.21     436.18     1219.84    1040.84   -1040.84   . 1 . . . . . eq 0                  
  7. HumanCap     547.60     126.00     434.10     513.50     173.30     182.50     250.40    -250.40   . . 1 . . . . eq 0                  
  8. FinanCap     658.06     179.80     407.53     358.26     200.59     124.35     201.17    -201.17   . . . 1 . . . eq 0                  
  9. CV1      306.38        99.18       361.43     359.28     171.18     112.08     178.07     .        . . . . -1 . . eq 178.07            
  10. CV2      1828.97       1914.81     2830.88    1961.40    1139.36    660.66     972.29     .        . . . . . -1 . eq 972.29            
  11. CV3      2339.46       662.36      1714.52    1221.16    800.41     441.33     667.22     .        . . . . . . -1 eq 667.22            
  12. ;                                                                                                                                       
  13. proc lp;                                                                                                                                
  14. run;                                                                                                                                    
  15.         
复制代码
上述的SAS程序用非常直接的方式将模型表示出来,利用lp过程步可以直接求得滨州的c(也就是matlab中的theta)为0.9285,其他决策单元求法类似。程序中_id_定义行名称,object表示第一行,Coaluse表示第二行,以此类推。x1-x7分别表示决策单元系数,每个城市投入产出指标值;c表示效率值,s1-s4表示输入松弛变量,s5-s7表示输出松弛变量,_type_表示运算符类型,程序中用了eq和min两种,_rhs_表示运算符右侧的常数项。matlab程序中用了linprog(f,A,b,Aeq,beq,LB,UB)线性规划函数,输入矩阵部分直接引用excel了数据,在变换模型中具有更大的灵活性。SAS程序也可考虑使用循环和控制命令使其更加简便。笔者抛砖引玉,希望SAS在DEA应用中也可以有一席之地。



二维码

扫码加我 拉你入群

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

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

关键词:数据包络分析 数据包络 数据包 Envelopment MATLAB程序 知识产权 分析法 EXCEL Excel 潍坊

论坛小生 发表于 2015-4-22 16:05:59 |显示全部楼层 |坛友微信交流群
赞一个

使用道具

slowppp 发表于 2020-10-16 17:23:10 |显示全部楼层 |坛友微信交流群
大神你好 请问下 我复制代码贴到SAS运行  很久了都没跑出结果 不知道是复制代码错误还是什么原因 可以麻烦您贴到txt檔里面吗 感谢

使用道具

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

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

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

GMT+8, 2024-4-19 08:04