SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 710|回复: 3
打印 上一主题 下一主题

请教一个SAS里面用随机数的问题

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2009-9-16 22:24:28 | 只看该作者

请教一个SAS里面用随机数的问题

大家请看下面这段程序,请问varthree和varfour的结果是不是应该是一样的?
vartwo里面因为随机数产生的seed是大于零的,所以vartwo的结果是一定的,vartwo=34.9625。。。。
所以我想varthree和varfour的结果应该都是35呀,可是SAS运行结果说varthree=21,varfour=35,这是为什么呢???

data random4;
  vartwo=ranuni(20)*50;
  varthree=ceil(ranuni(20)*50);
  varfour=ceil(vartwo);
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2009-9-16 22:53:27 | 只看该作者

Re: 请教一个SAS里面用随机数的问题

随机数在sas里有如一个长长的表。它包含了2^31-1 (?)随机数。在同一个数据步骤里,它只是从某一点开始按顺序取数而已。
[quote:2wmx9mku]data random4;
vartwo=ranuni(20)*50;*第一个数;
varthree=ceil(ranuni(20)*50);*下面的那个,第二个数;
varfour=ceil(vartwo);
run;[/quote:2wmx9mku]
你可以实验一下这个
[code:2wmx9mku]
data random4_;
vartwo=ranuni(20)*50;*第一个数应该和random4 里的VarTwo 是相同的;
varthree=ceil(ranuni(123)*50);*第二个数也和random4 里的VarThree 是相同的虽然seed已改变;
varfour=ceil(vartwo);
run;
[/code:2wmx9mku]

在loop中情况雷同。当然seed 0 除外。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2009-9-16 23:12:15 | 只看该作者

Re: 请教一个SAS里面用随机数的问题

哦,也就是说,在同一个data statement里面,每一次执行ranuni(0)的结果都不一样,所以在最一开始那个程序里面,datatwo=ranuni(0)*50 和 datathree=ceil(ranuni(0)*50) 随机数产生的就不是一样的。

明白了,谢谢楼上!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2009-9-16 23:16:05 | 只看该作者

Re: 请教一个SAS里面用随机数的问题

[quote:xj78mhb2]ranuni(0)?[/quote:xj78mhb2]
RANUNI(20)? RIGHT.也有可能碰巧是一样,尤其你取了它的 ceiling值。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-6 00:49 , Processed in 0.068602 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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