Random 在SAS中,从seed+;1.

Random 在SAS中,从seed+;1.,random,sas,Random,Sas,我得到了一些在一个数据步骤或不同数据步骤中生成随机数的示例代码。每次调用Ranui函数时,种子数增加1。有人知道这种随机数的性能吗 示例代码: %let seed = 12345; data a; do i = 1 to 100; randnum = ranuni(&seed); output; end; do i = 101 to 200; randnum = ranuni(&seed+1); output; end; run; 有关为随机数

我得到了一些在一个数据步骤或不同数据步骤中生成随机数的示例代码。每次调用Ranui函数时,种子数增加1。有人知道这种随机数的性能吗

示例代码:

%let seed = 12345;
data a;
  do i = 1 to 100;
  randnum = ranuni(&seed);
  output;
  end;

  do i = 101 to 200;
  randnum = ranuni(&seed+1);
  output;
  end;
run;

有关为随机数函数提供种子的文档可在此处找到:

还有两个问题:

1) 你为什么要这么做?我怀疑你真的需要

2) 即使我们假设您有一个合法且合理的应用程序用于此用途,您现在所做的也不会起作用

或者更确切地说,也就是说,程序将运行并按预期输出,但ranuni函数不会以您认为的方式输出数字,而是不断更新种子

如果您真的需要这样做,您需要使用诸如call ranuni或call rannor例程之类的程序。请参阅我链接到的文档

您当前的程序将从第一次调用Ranui时启动的流中输出随机数,在本例中,我相信种子集为12345。同样,请参阅我链接到的文档。它解释了拉努尼到底在做什么,还进一步说明了为什么你可能不想做你想做的事情

(编辑:您还可以研究较新的RAND函数)

编辑2:如果你真的想像现在这样做,你可以试试:

%let seed = 12345;
data a;
  do i = 1 to 100;
  call ranuni(&seed, randnum);
  output;
  end;

  do i = 101 to 200;
      call ranuni(&seed + 1, randnum);
  output;
  end;
run;

你为什么想要这个?如果你想要一个随机数序列,你可以复制每次运行,只需设置种子一次。如果希望每次运行的顺序不同,请将种子设置为负数。你能提供一些上下文吗?这是我得到的一个生成新随机流的示例。如果两个ranuni函数在两个单独的数据步骤中运行,它可能会工作。+1到这是一个可怕的想法,您真的,真的不应该这样做。没有理由改变种子会使它比从原始种子中取下100个数字更“随机”。现在我意识到,在相同的数据步骤中,第一个种子决定类Ranui函数的随机流。这两个随机流的性质如何?我指的是独立性。从文档来看,一般的建议是:在实践中,如果您使用单独和随机选择的种子创建多个小流,您可能不会遇到所显示的问题(即非独立性。创建单个流总是比较安全的。对于多个流,随着流变长,流重叠的机会增加。