SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 747|回复: 4
打印 上一主题 下一主题

求助:如何缩水让超大的循环得出结果

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2009-2-23 00:27:13 | 只看该作者

求助:如何缩水让超大的循环得出结果

求助各位高手:
   有一个循环,变量ww1--ww10 共10个,每个变量从0-5循环,得到x=5的组合。
data aa ;
do ww1 =0 to 5;
do ww2 =0 to 5;
do ww3 =0 to 5;
do ww4 =0 to 5;
do ww5 =0 to 5;
do ww6 =0 to 5;
do ww7 =0 to 5;
do ww8 =0 to 5;
do ww9 =0 to 5;
do ww10 =0 to 5;
x=ww1+ww2+ww3+ww4+ww5+ww6+ww7+ww8+ww9+ww10;
i+1;
if x=5 then
do;
i1+1;
output;
end; end; end; end; end; end;
end; end; end; end; end;
run;

程序循环了50388481次,得到X=5的全部组合有2002个。怎样让这个循环次数缩水,最好只循环2002次?

如果有20个变量ww1--ww20,每个变量从0-5循环,得到x=5的全部组合,就需要循环9.536E13次,有没有解决办法?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2009-3-2 20:44:37 | 只看该作者

Re: 求助:如何缩水让超大的循环得出结果

如果有20个变量,看来用循环排列出所有的 X = 5 的组合是不可能。

用SAS/OR的规划能不能得到答案呢?

求助高手帮助,谢谢!!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2009-3-3 00:29:14 | 只看该作者

Re: 求助:如何缩水让超大的循环得出结果

不需要高手,你用点脑就行了。
[code:2zpuhdq9]
%macro doit(out=, n=10, k=5);
%local i;
data &out;
   array x[&n] _temporary_;
   x[1] = 0;
%do i=1 %to %eval(&n-1);
   do ww&i=0 to &k-x[&i];
      x[%eval(&i+1)] = x[&i]+ww&i;
%end;
      ww&n = &k-x[&n];
      output;
%do i=1 %to %eval(&n-1);
   end;
%end;
run;
%mend doit;
%doit(out=a)
%doit(out=b,n=20)
%doit(out=c,n=20,k=10)
[/code:2zpuhdq9]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2009-3-3 20:39:46 | 只看该作者

Re: 求助:如何缩水让超大的循环得出结果

非常谢谢回复!!

       我是新手,学过一点逐层嵌套循环 您这种交替嵌套循环真没搞懂,再请教您能简单说说这循环过程吗?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2009-3-6 21:55:18 | 只看该作者

Re: 求助:如何缩水让超大的循环得出结果

非常谢谢回复!!

我是新手,学过一点逐层嵌套循环 您这种交替嵌套循环,这两天怎么也没搞懂,请教您能简单说说这循环过程吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-5 12:17 , Processed in 0.145092 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表