SAS:do循环帮助:变量=1,从按组开始到标记=1

SAS:do循环帮助:变量=1,从按组开始到标记=1,sas,do-loops,Sas,Do Loops,在SAS中,我有按时间排序的数据。在前n分钟,标记变量标记为0,然后更改为1。这发生在“by”变量中。我想创建一个新变量,从“by”组观察开始到标记变量变为1,每分钟=1。我尝试了几十种do循环组合,但都没有成功。任何帮助都将不胜感激 来自如下数据集: by_var marker A 0 A 0 A 1 B 0 B 0 B 1 如果每次观察时间为一分钟,则可以得到如下数据集: by_var marker minute A 0

在SAS中,我有按时间排序的数据。在前n分钟,标记变量标记为0,然后更改为1。这发生在“by”变量中。我想创建一个新变量,从“by”组观察开始到标记变量变为1,每分钟=1。我尝试了几十种do循环组合,但都没有成功。任何帮助都将不胜感激

来自如下数据集:

by_var marker
A      0
A      0
A      1
B      0
B      0
B      1
如果每次观察时间为一分钟,则可以得到如下数据集:

by_var marker minute
A      0      1
A      0      2
A      1      3
B      0      1
B      0      2
B      1      3
通过按_var排序并使用简单的数据步骤,从您的数据集中:

或者您是否需要使用时间变量更改类似的内容:

by_var marker time
A      0      12:34:01
A      0      12:34:59
A      0      12:35:01
A      0      12:36:12
A      1      12:36:50
B      0      12:34:01
B      0      12:34:09
B      0      12:34:59
B      0      12:36:12
B      1      12:37:50
为此:

by_var    marker      time         time2    minutes    Cumsum_minutes

  A          0      12:34:01           .       0           0
  A          0      12:34:59    12:34:01       0           0
  A          0      12:35:01    12:34:59       1           1
  A          0      12:36:12    12:35:01       1           2
  A          1      12:36:50    12:36:12       0           2
  B          0      12:34:01    12:36:50       0           0
  B          0      12:34:09    12:34:01       0           0
  B          0      12:34:59    12:34:09       0           0
  B          0      12:36:12    12:34:59       2           2
  B          1      12:37:50    12:36:12       1           3
代码:


你能提供一个示例数据集。。。你希望它最终看起来像什么?当然,示例数据对于这个问题成为一个好问题是必要的。
by_var    marker      time         time2    minutes    Cumsum_minutes

  A          0      12:34:01           .       0           0
  A          0      12:34:59    12:34:01       0           0
  A          0      12:35:01    12:34:59       1           1
  A          0      12:36:12    12:35:01       1           2
  A          1      12:36:50    12:36:12       0           2
  B          0      12:34:01    12:36:50       0           0
  B          0      12:34:09    12:34:01       0           0
  B          0      12:34:59    12:34:09       0           0
  B          0      12:36:12    12:34:59       2           2
  B          1      12:37:50    12:36:12       1           3
data my_data;
  input by_var $ marker time time.;
  format time time.;
  cards;
  A 0 12:34:01
  A 0 12:34:59
  A 0 12:35:01
  A 0 12:36:12
  A 1 12:36:50
  B 0 12:34:01
  B 0 12:34:09
  B 0 12:34:59
  B 0 12:36:12
  B 1 12:37:50
  ;
run;

proc sort data=my_data;by by_var;run;

data final;
  set my_data;
  format time2 time.;
  by by_var;
  time2=lag(time);
  if first.by_var then do;
    minutes = 0;
    Cumsum_minutes = 0;
  end;
  else minutes=intck("minutes",time2,time);
  Cumsum_minutes+minutes;
run;