根据约束SAS修改生产目标列表

时间:2014-02-12 18:23:40

标签: sas

我有一份生产目标清单。这是数据。

  

数据目标;

     

输入产品$ 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的方式。我愿意通过不同的方式来实现这一目标。

1 个答案:

答案 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进行,上面的内容比需要的要复杂一点(但是按照书面说明完成)。