SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 975|回复: 6
打印 上一主题 下一主题

请问如何用sas求一列数据1000个数据的乘积

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2010-4-16 08:20:14 | 只看该作者

请问如何用sas求一列数据1000个数据的乘积

请问如何用sas求一列数据1000个数据的乘积
非常感谢大家
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2010-4-16 08:54:10 | 只看该作者

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]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2010-4-23 16:42:37 | 只看该作者

Re: 请问如何用sas求一列数据1000个数据的乘积

个人以为这个题目的精华在于数据结果超出表示范围,呵呵
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2010-4-23 20:49:34 | 只看该作者

Re: 请问如何用sas求一列数据1000个数据的乘积

to zhoubin
同意。
另外,最终结果有可能不溢出,但是中间过程溢出的可能性很大。所以用求和的方法来求乘积,或许是一种方法呢。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2010-4-30 23:38:31 | 只看该作者

Re: 请问如何用sas求一列数据1000个数据的乘积

to byes
<!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2010-5-1 10:42:13 | 只看该作者

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]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2010-5-2 01:33:23 | 只看该作者

Re: 请问如何用sas求一列数据1000个数据的乘积

<!-- s:o --><img src="{SMILIES_PATH}/icon_surprised.gif" alt=":o" title="Surprised" /><!-- s:o -->
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-4 06:42 , Processed in 0.077094 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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