SAS中文论坛

标题: 请问如何用sas求一列数据1000个数据的乘积 [打印本页]

作者: shiyiming    时间: 2010-4-16 08:20
标题: 请问如何用sas求一列数据1000个数据的乘积
请问如何用sas求一列数据1000个数据的乘积
非常感谢大家
作者: shiyiming    时间: 2010-4-16 08:54
标题: Re: 请问如何用sas求一列数据1000个数据的乘积
[code:3mzcjqyf]


/*方法一*/
/*模拟数据*/
data sample;
        do _n_=1 to 1000;
                num=ranuni(0);
                output;
        end;
run;
/*1000个数据求乘积*/
data result(keep=y);
        set sample end=last;
        retain y 1;
        y=y*num;
        if last;
run;


/*方法二*/
proc iml;
/*        模拟1000行数据*/
        x=uniform(j(1000,1,0));
/*将这1000个数据求乘积*/
        y=1;
        do i=1 to nrow(x);
                y=y#x[i];
        end;
        print y;
quit;
[/code:3mzcjqyf]
作者: shiyiming    时间: 2010-4-23 16:42
标题: Re: 请问如何用sas求一列数据1000个数据的乘积
个人以为这个题目的精华在于数据结果超出表示范围,呵呵
作者: shiyiming    时间: 2010-4-23 20:49
标题: Re: 请问如何用sas求一列数据1000个数据的乘积
to zhoubin
同意。
另外,最终结果有可能不溢出,但是中间过程溢出的可能性很大。所以用求和的方法来求乘积,或许是一种方法呢。
作者: shiyiming    时间: 2010-4-30 23:38
标题: Re: 请问如何用sas求一列数据1000个数据的乘积
to byes
<!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
作者: shiyiming    时间: 2010-5-1 10:42
标题: Re: 请问如何用sas求一列数据1000个数据的乘积
正解。这个问题的关键在于有效数值计算,而不是编程。简单的数值分析告诉我们可以这么写程序
[code:24a5ukgp]
%let ntotal = 10000;
data sample;
   do _n_=1 to &amp;ntotal;
      num=(-1)**(ranuni(0)&gt;0&#46;32)*ranuni(0)*10;
      output;
   end;
run;

data _null_;
        set sample  end=eof;
        retain y 0;
        retain s 0;
        retain z 1;
       
       /* z=z*num;        */
       y + log10(abs(num));
       s + (sign(num)=-1);
       if eof then do;
          put y=;
        /*  put z=;*/
          put s=;
          j=-(2*(mod(s, 2))-1)*10**(y-floor(y)); i=floor(y);
          put &quot;product=&quot; j &quot;E&quot; i;
       end;
run;
[/code:24a5ukgp]
作者: shiyiming    时间: 2010-5-2 01:33
标题: Re: 请问如何用sas求一列数据1000个数据的乘积
<!-- s:o --><img src="{SMILIES_PATH}/icon_surprised.gif" alt=":o" title="Surprised" /><!-- s:o -->




欢迎光临 SAS中文论坛 (http://www.mysas.net/forum/) Powered by Discuz! X3.2