SAS - 创建一个在每次观察中都会增加的计数,但会根据二进制变量的值重置为零

时间:2016-05-23 18:09:16

标签: sas

我有一个包含以下两个变量的数据集(它包含更多,但为了简单起见,我将只讨论这两个):日期和热点

Date是SAS日期变量,Hot是二进制(0,1)变量。

我想读取数据集,并有一个count变量,用于计算Hot变量为1的行数。

这是我的数据的示例:

Date          Hot

14JUN2010     0
15JUN2010     1
16JUN2010     1
17JUN2010     0
18JUN2010     1
19JUN2010     1
20JUN2010     1
21JUN2010     0

这是我想要数据的示例:

Date          Hot    HotDays

14JUN2010     0      0
15JUN2010     1      1
16JUN2010     1      2
17JUN2010     0      0
18JUN2010     1      1
19JUN2010     1      2
20JUN2010     1      3
21JUN2010     0      0

我尝试过很多不同的东西,但都没有。我已经通过处理了解了retain语句和group,但我还没有想出如何使这些策略适应二进制变量计算顺序日期。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以利用HOT的值并处理数据BY HOT NOTSORTED以检测何时重置计数器。

Sum Statement By Statement

data hot;
   input Date:date9. Hot;
   cards;
14JUN2010     0
15JUN2010     1
16JUN2010     1
17JUN2010     0
18JUN2010     1
19JUN2010     1
20JUN2010     1
21JUN2010     0
;;;;
   run;
data hotdays;
   set hot;
   by hot notsorted;
   if first.hot then hotdays=0;
   hotdays + hot;
   run;

enter image description here