我正在教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