2014-02-12 69 views
0

我有一個生產目標列表。這裏是數據。根據約束脩改生產目標列表SAS

數據目標;

輸入產品$ w1 w2 w3 w4 w5;

卡;

甲800 400 200 400 100

乙300 400 200 100 100

Ç50 25 25 25 25

;

run;

現在,我需要做的是基於生產因某種原因停止而重新分配目標。例如,如果工廠在第一週關閉,那麼我無法生產800 As,300 Bs和50 Cs。現在我無法彌補第二週所有的生產力損失,只有50%。 o,因爲我在第一週需要800 As,所以我會在第二週做400個(以及我已經安排在第二週的),第三週也做同樣的事情。所以我想要我的新目標。

產物W1,W2,W3 W4 W5

A 0 800 600 400 100

乙0 550 350 100 100

Ç0 50 50 25 25

所以我在接下來的兩週內重新分配目標,每週進入第一週的50%。

我已經嘗試過用不同的方法來做到這一點,但無法進行任何語法改進。

這是順便說一下SAS。我願意以不同的方式來完成這一點。

回答

2

更有趣的問題圍繞着如何溝通W1值和程序的變化。將ds1轉換爲ds2的問題並不重要,您如何解決這個問題與更大的問題有關。

這樣做的一個好方法是使用一個具有適合您需要的參數的宏。舉個例子:

%macro fix_goals(week=,newweek=,percent=50,max=constant(big)); *max set arbitrarily high if not used; 
adjusted = min(&newweek.+(&week.*&percent.),&max.); *assumes MAX is the maximum it could accomplish in a week including both the old target and the new target; 
&week.=&week.-(adjusted-&newweek.); *how much was added; 
&newweek.=adjusted; 
%mend fix_goals; 

然後:

data want; 
set have; 
%fix_goals(week=w1,newweek=w2,percent=50); 
%fix_goals(week=w1,newweek=w3,percent=100); *the rest; 
run; 

你可以這樣做了一些依賴於標準以及如何你想傳達的變化,以程序類似的方式。如果你總是在接下來的2周內完全按照50/50進行,上面的內容比需要的稍微複雜一些(但是按照書面形式完成)。

+0

喬 - 我相信這正是我需要的。不過,我得到一個錯誤代碼:「所有位置參數必須在關鍵字參數之前。」您是否能夠在沒有此錯誤消息的情況下獲得所需的輸出? – pyll

+0

'newweek'需要'=' - 通過編輯修復答案。 – Joe

+0

另外,百分比需要小於1.非常感謝你,喬。這真棒....優雅和功能。榮譽。 – pyll