うまくいけば、簡単な答えです。私はシミュレーション研究を行っています。ここでは、1,000 回程度の複製ごとに、一様分布 U(25,200) から乱数の個体 N をサンプリングする必要があります。1 つのレプリケーションのコードを以下に示します。
%LET U = RAND("UNIFORM");
%LET N = ROUND(25 + (200 - 25)*&U.);
SAS と IML の両方で後続の DATA ステップと DO ループで N 変数を繰り返し呼び出す必要があるため、これらのマクロ変数は両方とも DATA ステップの外で作成しました。
問題は、レプリケーション内で N を呼び出すたびに、U が再サンプリングされ、必然的に N が変更されることです。したがって、N はレプリケーション内で一定に保たれません。この問題は、以下のコードに示されています。ここでは、最初に N を変数 (個人間で一定) として作成し、DO ループを使用して各個人の X の予測子の値をサンプリングします。N の値が個体の総数と同じではないことに注意してください。これも問題です。
DATA ID;
N = &N.;
DO PersonID = 1 TO &N.;
X = RAND("NORMAL",0,1); OUTPUT;
END;
RUN;
私がしなければならないことは、1 回の複製全体を通して何らかの方法で U を一定に保ち、次に複製 2 のために再サンプリングできるようにすることであると推測しています。U を一定に保つことにより、N は必然的に一定に保たれます。
マクロ変数を使用してこれを行う方法はありますか?