设置截止时间SAS

Gif*_*fty 2 sas

我遇到的数据集问题如下所示.这是不同地点/周的库存盘点:

data have;
    input itm location $ week inv;
cards;
3 x 1 30
3 x 2 20
3 x 3 0
3 x 4 5
3 y 1 100
3 y 2 90
3 y 3 0
3 y 4 6
4 x 1 30
4 x 2 0
4 x 3 40
4 x 4 10
;
run;
Run Code Online (Sandbox Code Playgroud)

这是问题...一旦库存达到特定位置/项目组合的0,我希望该组合的剩余周数用0估算.我想要的输出如下所示:

data want;
    input itm location $ week inv;
cards;
3 x 1 30
3 x 2 20
3 x 3 0
3 x 4 0
3 y 1 100
3 y 2 90
3 y 3 0
3 y 4 0
4 x 1 30
4 x 2 0
4 x 3 0
4 x 4 0
;
run;
Run Code Online (Sandbox Code Playgroud)

我对SAS很新,不知道怎么做.救命?!

谢谢!

DaB*_*dze 5

您可以通过以下步骤执行此操作:

  • by 用于指示顺序的语句(输入数据集必须相应地排序)
  • retain用于将控制变量(reset)的值传递给以下行的语句
  • 停用reset=0每个第一个位置/项目组合的imputation()
  • 激活imputation(reset=1)以获得inv的零值
  • 如果插补处于活动状态,则设置为0

码:

data want (drop=reset);
    set have;
    by itm location week;
    retain reset;
    if first.location then reset=0;
    if (inv = 0) then reset=1;
    else if (reset = 1) then inv=0;
run;
Run Code Online (Sandbox Code Playgroud)

reset显式修改之前,值从行到行保持不变.

weekby语句中变量的存在只是为了检查输入数据是按时间顺序排序的.