2

1 つのデータ ステップまたは別のデータ ステップで乱数を生成するサンプル コードを取得しました。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 にあります。

さらに 2 つの問題があります。

1) なぜこれをやりたいと思ったのですか? 本当にそうする必要があるとは思えません。

2) 仮にあなたがそのような用途のための合法的で合理的なアプリケーションを持っていると仮定したとしても、あなたが現在行っていることは機能しません。

というか、プログラムは実行され、期待どおりに出力されますが、ranuni 関数はシードが継続的に更新されているため、期待どおりに数値を出力しません。

本当にこれを行う必要がある場合は、call ranuni または call rannor ルーチンなどを使用する必要があります。私がリンクしたドキュメントを参照してください。

現在存在するプログラムは、ranuni への最初の呼び出しによって開始されたストリームから乱数を出力します。この場合、シードは 12345 に設定されていると思います。もう一度、リンク先のドキュメントを参照してください。それはラヌニが実際に何をするのかを説明し、あなたがやろうとしていることをおそらくやりたくない理由を示しています.

(編集: 新しい 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 に答える