【发布时间】:2018-01-16 13:54:11
【问题描述】:
我正在教授一门 SAS 课程,并且正在尝试一些模拟。我目前正在尝试模拟棒球阵容。我对宏不是很擅长,并且能够通过多次试验和错误以及之前在此站点上的一些帮助来完成此代码。我希望有人能帮助我到达终点线。
我的目标是能够正确使用计数器。
我正在读取一个有 9 个观察值的数据集,并且有一个名为 cutoff 的变量(它是根据击球手确定击球与否的能力使用的截止值,并将与 randvar 进行比较)。变量“顺序”只是为了让它更容易理解(注意,每 9 个击球手循环一次)。一旦第三次出局(局结束),Count_outs 将出局重置为 0。
我需要能够重复读取这 9 个观察数据集,而我完成它的方式(在前面的一些帮助下)是创建一个名为“out”的数据集,并将其附加到我的数据中按照我下面的方式设置“原点”。
除了少数例外,一切都按我的意愿运行。我想要一个计数器在 27 次补牌后重置为 0。
在 18 次观察之后,它可以按照我的意愿工作,尽管第 19 次观察,请注意第 19 次观察的缺失。因此,当然,我希望第 19 次(及之后的)观察具有一个随机变量(从第 19 次观察开始,每第 9 次观察都会丢失),并相应地更新计数器。
我认为应该很容易解决的另一个问题是计数不会正确。请注意,第一个观察值有一个 randvar = 0.18(小于截止值,这应该会导致 out 并且 count=1。但是,之后它可以正常工作。我已经尝试修改了几十次)。有人可以帮忙吗?
非常感谢
%macro replicate(new,out,n)/des=’&out is &new repeated &n times.’;
Data & out;
Set &new;
%do i=1 %to &n;
Data &out;
randvar=uniform(1);
if randvar<cutoff then do;
count+1;
count_outs+1;
end;
set &out &new;
if count_outs=3 then count_outs=0;
if count=28 then do;
set &new;
count=1;
end;
run;
run;
%end;
%mend;
注意:我尝试显示输出,但无法正确格式化。
【问题讨论】:
-
如果你的问题更笼统一点会有所帮助。由于棒球不是我来自的“事物”,因此我对此知之甚少,因此很难理解您的问题。你能提供样本数据和所需的输出吗?话虽如此,该代码看起来很奇怪。看起来您将数据步骤放在没有多大意义的数据步骤中。另外我会假设您的第一个
data & out;语句在这里输入错误,您的意思是data &out; -
感谢您的回复。我确实得到了答案