使某个值后的所有值都相同

时间:2016-03-15 14:16:31

标签: sas

我有一个像这样的数据集:

ID |时间|值

1 | 1 | 0

1 | 2 | 2

1 | 3 | 0

1 | 4 | 0.5

2 | 1 | 0

2 | 2 | 0

2 | 3 | 3

如果值> gt; 0然后我希望指标变量在该ID的所有后续时间为1,例如:

ID |时间|价值|指示器

1 | 1 | 0 | 0

1 | 2 | 2 | 1

1 | 3 | 0 | 1

1 | 4 | 0.5 | 1

2 | 1 | 0 | 0

2 | 2 | 0 | 0

2 | 3 | 3 | 1

我的实际数据集要大得多,有点复杂(有多个值/条件会导致指示符从0翻转到1)但它们都会在正确的时间翻转。我的问题是将这个正值级联到所有后续ID /事件。因此,如果值翻转为1并且随后的观察结果不是1,则它应该为1,而是指示符为0.它看起来像这样:

ID |时间|价值|指示器

1 | 1 | 0 | 0

1 | 2 | 2 | 1

1 | 3 | 0 | 0

1 | 4 | 0.5 | 0

2 | 1 | 0 | 0

2 | 2 | 0 | 0

2 | 3 | 3 | 1

这是我目前的代码:

DATA mydata;

     SET mydata;

     BY ID;

     IF first.ID then indicator = 0;

          else if lag1(indicator) = 1 then indicator=1;

 RUN;

我认为这只会查找一个并查看之前的值是否为1.如果是,则将该指标设置为1.然后下一行将查找指示符为1且该行将变为1好。

1 个答案:

答案 0 :(得分:2)

您可以使用retain语句并检查值。 retain indicator;会将指标的值从datastep的一次迭代保留到下一次。

DATA mydata;
     SET mydata;
     RETAIN indicator ;
     BY ID;

     IF first.ID then indicator = 0;
     IF value > 0 then indicator = 1;
 RUN;