楼主: xxqj8659
3538 8

[求助]如何处理cards中不能用变量代替数据的问题? [推广有奖]

  • 0关注
  • 0粉丝

已卖:130份资源

硕士生

45%

还不是VIP/贵宾

-

威望
0
论坛币
37 个
通用积分
2.1000
学术水平
1 点
热心指数
1 点
信用等级
0 点
经验
953 点
帖子
54
精华
0
在线时间
272 小时
注册时间
2007-4-2
最后登录
2025-11-13

楼主
xxqj8659 发表于 2009-5-26 11:18:00 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

想要用线性规划lp程序处理一批数据,每次格式一样,但是数据略有不同。想用一个变量替代改变的数据,那么可以节省工作量,但操作了一下,没能成功......

数据量较大,不可能一个个的操作,请各位SAS达人指点一二,谢谢

比如就像下面这个程序中,我想把a的值带到下面这个过程中去,但是程序报错。

data dea;                                                                                                                              
a=1;                                                                                                                                 
input _row_ $ x1-x3 _type_ $ _rhs_;                                                                                                    
cards;                                                                                                                                 
object  1 1 1 min  .                                                                                                                 
inpu1  a 2 3 <= 20                                                                                                                     
inpu2  0.5 4 1 >= 10                                                                                                                   
;                                                                                                                                      
proc lp;                                                                                                                               
run;


[此贴子已经被作者于2009-5-26 14:08:17编辑过]

二维码

扫码加我 拉你入群

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

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

关键词:cards card 不能用 RDS CAR 数据 变量 代替 cards

回帖推荐

林嘉祥 发表于6楼  查看完整内容

*抛块砖头,不考虑PROC LP出错或者算不出的情况,结果保存到gml; data dea; input _row_ $ x1-x3 _type_ $ _rhs_; cards; object  1 1 1 min  . inpu1  . 2 3 <= 20 inpu2  5 4 1 >= 10 ; %macro doit(out=, a=1); proc sql;     update dea set x1=&a where _row_='inpu1'; quit; proc lp data=dea printlevel=-2 primalout=xxx(keep=_var_ _v ...

本帖被以下文库推荐

沙发
rdzr 发表于 2009-5-26 11:48:00

LZ,可否把问题说得更清楚一些?偶估计 用 SAS MACRO 似乎是一个可行的方案!

仅供参考,谢谢!

藤椅
爱萌 发表于 2009-5-26 12:29:00

the defiction of problem is vague or fuzzy, please clarify the problem

最恨对我说谎或欺骗我的人

板凳
xxqj8659 发表于 2009-5-26 12:38:00

是这样的,我想运用DEA方法计算一批企业的效率,但运用SAS的运筹学模块只能一次计算一家企业的。即是有n组线性规划问题,而每组线性规划问题的约束条件仅仅有个别数据的差别。我就想编一个程序,把变化的那部分用变量来代替,而每次只需给这个变量赋予不同的值。但是在SAS中不能实现一样。比如就像下面这个程序中,我想把a的值带到下面这个过程中去,但是程序报错。

data dea;                                                                                                                               
a=1;                                                                                                                                 
input _row_ $ x1-x3 _type_ $ _rhs_;                                                                                                    
cards;                                                                                                                                 
object  1 1 1 min  .                                                                                                                 
inpu1  a 2 3 <= 20                                                                                                                     
inpu2  0.5 4 1 >= 10                                                                                                                   
;                                                                                                                                      
proc lp;                                                                                                                               
run;

报纸
rdzr 发表于 2009-6-4 12:08:00

LZ,坦白地讲,偶并不喜欢复杂的编程,看到复杂的程序代码就眼晕。所以,偶编程能力一直都很烂!

但这里可以提供一个思路供参考:

1、建议把您的数据保存为 excel 数据表, 或者 别的你认为比较拿手的数据库文件;

2、每次做 LP 时不要直接用 data 步 建立数据集,而是用 proc import 过程导入,然后做您想需要的 LP;

3、当遇到极少量需要修改的变量或观测值时,不要试图直接 在 SAS 之 DATA 步进行修改,而是在 excel 表 进行少量修改,这样就可大大节省时间和精力;

4、当再次需要做 LP 时,用 Proc import 过程 调入 经修改的数据文件即可。

(以上仅供参考,希望能够对 LZ 有所帮助,谢谢!)

地板
林嘉祥 发表于 2009-6-4 13:33:00
*抛块砖头,不考虑PROC LP出错或者算不出的情况,结果保存到gml;
data dea;
input _row_ $ x1-x3 _type_ $ _rhs_;
cards;
object  1 1 1 min  .
inpu1  . 2 3 <= 20
inpu2  5 4 1 >= 10
;

%macro doit(out=, a=1);
proc sql;
    update dea set x1=&a where _row_='inpu1';
quit;
proc lp data=dea printlevel=-2 primalout=xxx(keep=_var_ _value_);
run;
proc transpose data=xxx out=yyy(keep=x1-x3 inpu1 inpu2 object);
    id _var_;
    var _value_;
run;
data zzz;
    a  = &a;
    set yyy;
proc append base=&out data=zzz;
proc datasets nolist;
    delete xxx yyy zzz;
quit;
%mend;
%doit;

proc datasets nolist;
    delete gml;
quit;
data a;
    input a;
    call execute(cats('%doit(out=gml, a=', a, ')'));
datalines;
0
1
2
3
5
10
20
100
;
run;
*狗R的几次才贴得上!;

[此贴子已经被作者于2009-6-4 13:38:36编辑过]

已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

平生无大志,唯吃饱ZB,喂饱JB耳!

7
rdzr 发表于 2009-6-4 14:56:00

嘉祥同志果然了得,佩服!

对于小型的 LP, 偶倒建议采用 excel,下面给出 一篇这方面的文章的链接(www.lydbgz.com/djkt/UploadFiles/2005102522190640.doc

仅供参考,谢谢!

8
xxqj8659 发表于 2009-6-10 19:46:00
谢谢各位热心的帮助,问题解决了。但发现用matlab做这个似乎更简单

9
psweather0129 发表于 2009-6-12 00:10:00
最好的方法是使用PROC LP的SPARSE FORMAT
就可以利用MACRO簡單編程

SPARSE請GOOGLE....
很簡單...

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 08:36