楼主: andyjia1984
3405 5

[求助]2万论坛币求助 关于SAS OR模块 [推广有奖]

  • 0关注
  • 1粉丝

VIP

讲师

60%

还不是VIP/贵宾

-

威望
1
论坛币
2452338 个
通用积分
35.5758
学术水平
5 点
热心指数
1 点
信用等级
5 点
经验
11886 点
帖子
68
精华
0
在线时间
505 小时
注册时间
2005-9-30
最后登录
2024-4-9

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
正在写篇关于DEA的论文,想在SAS中实现引入quasi-fixed inputs 的模型, 其实用proc lp 应该就能解决,但由于本人对LP不是很熟悉,所以在编程中遇到好多问题,那位兄弟能给与解答最少2万论坛币感谢。。。。

希望能MSN联系,或者邮件。。。
msn: andyjia1984@hotmail.com
e-mail: linjia.zhang1984@gmail.com

谢 谢大家啦 , 以下蓝字的是一个基本的程序, 问题是:那位能给我讲解下在model building 中的语句, %macro data 我基本都明白,但是在model building 中的语句尤其是 array , 彻底把我能晕拉。。。。 (我想在线性规划中加入两个限制条件,第一,lambda的和为1。。和一个不等关系)

一个小问题。。 keep _row_ _col_ _type_ _coef_ ;, 我不明白变量_coef_ 是什么时候引进的阿。。。

红色语句中的J0是怎么回事啊??和绿色语句中的j0是一个变量吗??


%macro data;
data NY;
  infile &_OutData delimiter='09'X missover dsd ;
  array NYarray(&_nOutput) $ NY1-NY&_nOutput ;
  length unitname $ 50 ;
  input unitname $ NYarray(*) $ ;
  if _n_ eq 1 then output ;
  drop unitname;
  run;

data AY DMUs;
  infile &_OutData delimiter='09'X missover dsd;
  array AYarray(&_nOutput) AY1-AY&_nOutput;
  length unitname $ 50 ;
  input unitname $ AYarray(*) ;
  if _n_ gt 1 then output ;
run;


data NX;
  infile &_InData delimiter='09'X missover dsd ;
  array NXarray(&_nInput)$ NX1-NX&_NInput ;
  length unitname $ 50 ;
  input unitname $ NXarray(*) $ ;
  if _n_ eq 1 then output;
  drop unitname;
  run;

data AX;
  infile &_InData delimiter='09'X missover dsd ;
  array AXarray(&_nInput) AX1-AX&_nInput;
  length unitname $ 50 ;
  input unitname $ AXarray(*) ;
  if _n_ gt 1 then output;
  call symput('_nDmu',_n_-1);
  run;

data DMUs;
  set AY (keep=UnitName);
  Uj0=_n_;
  run;
%mend data;
/*MODEL BUILDING (%MODEL)*/
%macro model;
%local i j j0;
data MODEL1;
  %let _nUnit=&_nDmu;
  array NYarray(&_nOutput)$ NY1-NY&_nOutput ;
  array AYarray(&_nOutput) AY1-AY&_nOutput;
  array NXarray(&_nInput) $ NX1-NX&_NInput ;
  array AXarray(&_nInput) AX1-AX&_nInput;
  array Jarray(&_nUnit) U1-U&_nUnit ;
  length _row_ $ 50 _col_ $ 50 _type_ $ 8 ;
  keep _row_ _col_ _type_ _coef_ ;
  J0=&jj; /* Jo is unit under assessment*/
  if &_Orienta='InputMin' then do;
                          _type_='MIN';
                          _row_ ='OBJ';
                          _col_='.';
                          _coef_=.;
                          output;
                          _type_='.';
                          _row_ ='OBJ';
                          _col_ ='FI';
                          _coef_=1;
                          output;
                          _type_='.';
                          _row_ ='OBJ';
                          _col_='_rhs_';
                          _coef_=0;
                          output;
                          end;

    link ReadNX;
    do j= 1 to &_nUnit;
       link ReadAX;
    do i= 1 to &_nInput;
       _col_='LA' || put(j,3.);
       _row_=NXarray(i);
       _type_='.';
       _coef_=AXarray(i);
       output;
       if j=J0 then do;
         select(&_Orienta);
         when('InputMin') do;
         _row_=NXarray(i);
         _type_='.';
         _coef_=-AXarray(i);
         _col_='FI';
         output;
        _col_='_rhs_';
        _row_=NXarray(i);
        _type_='LE'; /*LE*/;
        _coef_=0;
        output;
        end;
      when('OutputMax') do;
        _row_=NXarray(i);
        _type_='LE';
        _coef_=AXarray(i);
        _col_='_rhs_';
        output;
        end;
      otherwise;
      end;
    end;
  end;
end;
ReadNX: set NX; return;
ReadAX: set AX; return;
run;

data MODEL2;
  %let _nUnit=&_nDmu;
  array NYarray(&_nOutput)$ NY1-NY&_nOutput ;
  array AYarray(&_nOutput) AY1-AY&_nOutput;
  array NXarray(&_nInput) $ NX1-NX&_NInput ;
  array AXarray(&_nInput) AX1-AX&_nInput;
  array Jarray(&_nUnit) U1-U&_nUnit ;

  length _row_ $ 50 _col_ $ 50 _type_ $ 8 ;
  keep _row_ _col_ _type_ _coef_ ;

  J0=&jj; /* Jo is unit under assessment*/;
  if &_Orienta='OutputMax' then do;
                           _type_='MAX';
                           _row_ ='OBJ';
                           _col_='.';
                           _coef_=.;
                           output;
                           _type_='.';
                           _row_ ='OBJ';
                           _col_ ='FI';
                           _coef_=1;
                           output;
                           _type_='.';
                           _row_ ='OBJ';
                           _col_='_rhs_';
                           _coef_=0;
                           output;
                           end;
  link ReadNY;
  do j= 1 to &_nUnit;
     link ReadAY;
     do r= 1 to &_nOutput;
        _col_='LA' || put(J,3.);
        _row_=NYarray(r);
        _type_='.';
        _coef_=AYarray(r);
        output;
        if j=J0 then do;
           select(&_Orienta);
           when('InputMin') do;
             _col_='_rhs_';
             _row_=NYarray(r);
             _type_='GE';
             _coef_=AYarray(r);
             output;
             end;
           when('OutputMax') do;
           _col_='FI';
           _row_=NYarray(r);
           _type_='.';
           _coef_=-AYarray(r);
           output;
           _col_='_rhs_';
           _row_=NYarray(r);
           _type_='GE';
           _coef_=0;
           output;
           end;
         otherwise;
         end;
       end;
     end;
   end;
ReadNY: set NY; return;
ReadAY: set AY; return;
run;
data MODEL; set MODEL1 MODEL2 ; run;
%mend model ;



/*SAS/DEA REPORT WRITING (%REPORT)*/
%macro report;
data eff(drop=Uj0);
  merge DMUs Eff;
  by Uj0;
run;
proc sort data=Eff; by eff; run;
proc print data=Eff; run;
proc sort data=Eff; by UnitName; run;
proc print data=Eff; run;
%mend report;



/*SAS/DEA MACRO*/

%macro sasdea;
  libname sasdea 'D:\sasdea';
  proc datasets nolist; delete Eff Report1 report2; run;
  %data;
  %let _nUnit=&_nDmu;
  %do jj=1 %to &_nUnit;
    %model;
    proc lp data=MODEL noprint sparsedata
primalout=lp2 dualout=lp3 ; run;
    data EffJ0(keep=Uj0 eff); set lp2 (where=(_var_='OBJ')); Uj0=&jj;
    if &_Orienta='OutputMax' and _value_ ne 0 then Eff=1/_value_;else Eff=_value_;
run;
    proc datasets nolist; append base=Eff data=EffJ0; run;
    data lp2; set lp2; Uj0=&jj;run;
    proc datasets nolist; append base=Report1 data=lp2;run;
    data lp3; set lp3; Uj0=&jj;run;
    proc datasets nolist; append base=Report2 data=lp3;run;
    %end;
    %report;
    %mend sasdea;

%let _InData='G:\dea\InVar.TXT';
%let _nInput=2;
%let _OutData='G:\dea\Outvar.TXT' ;
%let _nOutput=2;
%let _Orienta='InputMin';
%sasdea;

[此贴子已经被作者于2008-6-4 22:28:41编辑过]

二维码

扫码加我 拉你入群

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

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

关键词:论坛币 Assessment delimiter Assessmen otherwise 论坛 求助 模块 SAS

沙发
andyjia1984 发表于 2008-6-4 22:21:00 |只看作者 |坛友微信交流群
阿 对了 不知道这么发帖违规不违规阿。。。。要是违规了清版主见量啊。。真的是比较着急。。。不过决不骗人。。。。。

使用道具

藤椅
andyjia1984 发表于 2008-6-5 19:35:00 |只看作者 |坛友微信交流群
顶上来。。。。

使用道具

板凳
andyjia1984 发表于 2008-6-5 23:40:00 |只看作者 |坛友微信交流群
问题解决了一部分...就是BCC模型已经解决拉. 填入红色程序就行..但还是有关于OR的问题...那位兄弟了解阿

/*MODEL BUILDING (%MODEL)*/
%macro model;
%local i j j0;
data MODEL1;
  %let _nUnit=&_nDmu;
  array NYarray(&_nOutput)$ NY1-NY&_nOutput ;
  array AYarray(&_nOutput) AY1-AY&_nOutput;
  array NXarray(&_nInput) $ NX1-NX&_NInput ;
  array AXarray(&_nInput) AX1-AX&_nInput;
  array Jarray(&_nUnit) U1-U&_nUnit ;
  length _row_ $ 50 _col_ $ 50 _type_ $ 8 ;
  keep _row_ _col_ _type_ _coef_ ;
  J0=&jj; /* Jo is unit under assessment*/
  if &_Orienta='InputMin' then do;
                          _type_='MIN';
                          _row_ ='OBJ';
                          _col_='.';
                          _coef_=.;
                          output;
                          _type_='.';
                          _row_ ='OBJ';
                          _col_ ='FI';
                          _coef_=1;
                          output;
                          _type_='.';
                          _row_ ='OBJ';
                          _col_='_rhs_';
                          _coef_=0;
                          output;
                          end;

    link ReadNX;
    do j= 1 to &_nUnit;
    link ReadAX;
       do i= 1 to &_nInput;
          _col_='LA' || put(j,3.);
          _row_=NXarray(i);
          _type_='.';
          _coef_=AXarray(i);
          output;
          if j=J0 then do;
              select(&_Orienta);
              when('InputMin') do;
                  _row_=NXarray(i);
                  _type_='.';
                  _coef_=-AXarray(i);
                  _col_='FI';
                  output;
                  _col_='_rhs_';
                  _row_=NXarray(i);
                  _type_='LE'; /*LE*/;
                  _coef_=0;
                  output;
                  end;
             when('OutputMax') do;
                  _row_=NXarray(i);
                  _type_='LE';
                  _coef_=AXarray(i);
                  _col_='_rhs_';
                 output;
                 end;
          otherwise;
          end;
        end;
 
       end;
     _col_='LA' || put(j,3.);
         _row_='sum';
         _type_='.';
         _coef_=1;
         output;  
end;
         _col_='_rhs_';
         _row_='sum';
         _type_='EQ';
         _coef_=1;
         output;
ReadNX: set NX; return;
ReadAX: set AX; return;
run;

[此贴子已经被作者于2008-6-5 23:46:07编辑过]

使用道具

报纸
woaisyz2006 发表于 2008-6-6 00:46:00 |只看作者 |坛友微信交流群

都是高手啊

我是个人物,我什么也不是

使用道具

地板
zhaoyukun 发表于 2008-6-7 10:41:00 |只看作者 |坛友微信交流群

支持一下

向您学习!

有机会向您请教!

我的毕业论文也有DEA模型的内容

人生无从来,奋斗无止境!

使用道具

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

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

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

GMT+8, 2024-4-24 21:26