<p>基于你的思路可修改如下,但不是很有效,运行时间长。<br/>data shuij; <br/> array reed(5); <br/> do i=1 to 500; <br/> reed(1)=int(ranuni(13)*48+1); <br/> j=2; <br/> do until(j>=6); <br/> reed(j)=int((ranuni(13)*48)+1); <br/> do k=1 to j-1; <br/> if reed(j)=reed(k) then go to skip; <br/> end; <br/> j=j+1; <br/> skip: j=j; <br/> end; <br/> output; <br/> end; <br/>run; <br/>libname sss 'd:/sas/'; <br/>data month(drop=time); <br/> merge sss.hmonth sss.ssmonth ; by time; <br/>run; </p><p>%macro test(m); <br/>%do k=1 %to &m; <br/> data a(keep=reed1-reed5); <br/> set shuij ; if i=&k; <br/> run; <br/> data b&k(keep=y); <br/> set month; if _n_=1 then do until(last); set a end=last; end; <br/> array reh{48} return01-return48; <br/> array res{48} ret01-ret48; <br/> array reed{5} reed1-reed5; <br/> array xz(25); <br/> array tot(25); <br/> f=1; <br/> do p=1 to 5; <br/> do q=1 to 5; <br/> xz(f)=reh{reed(p)}-res{reed(q)}; <br/> tot(f)+xz(f)*xz(f); f+1; <br/> end; <br/> end; <br/> if _n_=120; <br/> y=20; <br/> do ac=1 to 25; <br/> if y > tot(ac) then y=tot(ac); <br/> end; <br/> run; <br/>%end; <br/>data c; <br/> set %do k=1 %to &m; b&k %end; <br/> ; <br/>run; <br/>proc datasets lib=work; <br/> delete %do k=1 %to &m; b&k %end; / memtype=data; <br/>run; <br/>quit; <br/>%mend test(m); <br/>%test(500); /***开始可用10或50测试下,用500运行时间较长。***/<br/><br/></p>
[此贴子已经被作者于2008-2-24 4:19:23编辑过]