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