希望有一个简单的答案。我正在做一项模拟研究,我需要在大约一千次重复中从均匀分布 U(25,200) 中抽取随机数量的个体 N。一次复制的代码如下所示:
%LET U = RAND("UNIFORM");
%LET N = ROUND(25 + (200 - 25)*&U.);
我在 DATA 步骤之外创建了这两个宏变量,因为我需要在随后的 DATA 步骤和 SAS 和 IML 中的 DO 循环中重复调用 N 变量。
问题是每次我在复制中调用 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;
我猜我需要做的是在整个复制过程中以某种方式保持 U 不变,然后允许对复制 2 重新采样,依此类推。通过保持 U 不变,N 将必然保持不变。
有没有办法使用宏变量来做到这一点?