2

我得到了一些关于在一个数据步骤或不同数据步骤中生成随机数的示例代码。每次调用 ranuni 函数时种子增加 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;
4

1 回答 1

3

可以在此处找到有关为随机数函数提供种子的文档:http: //support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/a001281561.htm

还有两个额外的问题:

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

2)即使我们假设您有一个合法且合理的应用程序用于此类用途,您现在正在做的事情也不会奏效。

或者更确切地说,也就是说,程序会运行,并且会按预期输出,但是 ranuni 函数并不会像你想象的那样输出数字,种子会不断更新。

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

您当前存在的程序将从第一次调用 ranuni 启动的流中输出随机数,在这种情况下,我相信它的种子设置为 12345。再次,请参阅我链接到的文档。它解释了 ranuni 实际上做了什么,它还继续说明为什么你可能不想做你正在尝试做的事情。

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

Edit2:如果你真的想像现在这样,你可以尝试:

%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;
于 2013-08-05T09:16:03.550 回答