|
|
楼主

楼主 |
发表于 2007-4-15 09:09:11
|
只看该作者
求全排列时的循环问题
sasor上有个求10个数字的全排列的问题,我的想法是下面的代码执行后,r9变量就会有需要生成的全部排列。但结果却不是:(。想法是这样的,从数字0开始,加入1后应该有01、10两个排列;加入2后应该有201、021、012、210、120、102六个排列;加入3后会有24个排列(每个三位数的数字,有4个空挡可插入4,对应4个四位数的排列,四六二十四个)。。。。。。,一直如此,直到加入数字9后,就可以产生全部的10的阶乘个排列。也是按照排列的原始定义思路来做的。
但是下面的代码执行后,从10、01开始后,循环至数字2时,只生成了01对应的201、021、012三个排列不是六个;到数字3时,只生成了012再加上3对应的4个排列不是二十四个;到最后,r9只有012345678加上9对应的10个排列。为什么循环少了呢?谢谢。
并且类似这种需要遍历某些观测来循环的普遍需求,怎么解决。java等语言中,提供collection等集合来实现,sas该怎么实现呢?
[code:47c58]data permute;
format str $ 10.;
array r(9) $ 10. r1-r9;
do i=1 to dim(r);
if i=1 then do;
len=1;
str='0';
end;
else do;
len=length(r(i-1));
str=r(i-1);
end;
do j=1 to len+1;
if j=1 then r(i)=put(i,$1.)||trim(str);
else if j=len+1 then r(i)=trim(str)||put(i,$1.);
else r(i)=substr(str,1,j-1)||put(i,$1.)||substr(str,j);
output;
end;
end;
run; [/code:47c58] |
|