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 &ntotal;
num=(-1)**(ranuni(0)>0.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 "product=" j "E" 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