我正在教SAS课程,并且在模拟中涉及了一些内容。我目前正在模拟棒球阵容。我在宏中不是很强大,并且能够通过这个网站上的许多试验和错误以及一些帮助来执行此代码。我希望有人能帮助我走向终点。SAS宏内部的计数器/循环
我在这里的目标是能够与计数器正常工作。
我在具有9周的观察,并具有可变截止称为一个数据组读出(它是根据面糊来确定命中与否和将被比作randvar的能力所使用的截止值)。 “顺序”这个变量只是为了让它更容易遵循(注意,每9个击球手切换循环)。 Count_outs在三分之一输出结束后将输出重置为0(结局)。
我需要能够在这9个观测数据集中重复读取,而且我已经做到了这一点(在此之前的一些帮助下)的方法是创建一个名为'out'的数据集,并将其附加到我的数据集'orig'以我下面的方式。
一切正常,因为我想除了一些例外。我想要一个计数器,在27次输出后重置为0。
18后的观察,它的作品,因为我想它,虽然19观察,记下19观察missings。所以,当然,我想要的是第19次(和下一次)的观测有一个随机变量(它从第19次观测开始,每9次观测就缺少一次),并相应更新计数器。
其他问题,我认为应该是一个简单的办法是,数右脚不下车。注意第一个观测值有一个randvar = 0.18(小于截止值,这应该导致一个输出并且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;'声明在这里输入错误,你的意思是数据&out;' – user2877959
感谢你的回应。我确实得到了答案 – GKJohn