我有一份生产目标清单。这是数据。
数据目标;
输入产品$ w1 w2 w3 w4 w5;
卡;
800 400 200 400 100
B 300 400 200 100 100
C 50 25 25 25 25
运行;
现在,我需要做的是根据生产是否因某种原因而停止来重新分配目标。例如,如果工厂在第1周关闭,那么我无法生产800 As,300 B和50 Cs。现在我无法在第2周弥补所有失去的生产力,只有50%。 o,因为我在第1周需要800 As,所以我将在第2周制作400个As(连同我在第2周已安排的那些)并在第3周做同样的事情。所以我想要我的新目标。
产品w1 w2 w3 w4 w5
A 0 800 600 400 100
B 0 550 350 100 100
C 0 50 50 25 25
所以我在接下来的两周内重新分配目标,每周占目标1的目标的50%。
我尝试了不同的方法来做到这一点,但无法在语法上取得任何进展。
这是SAS的方式。我愿意通过不同的方式来实现这一目标。
答案 0 :(得分: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进行,上面的内容比需要的要复杂一点(但是按照书面说明完成)。