#sas #do-loops
#sas #циклы выполнения
Вопрос:
В SAS у меня есть данные, которые отсортированы по времени. В течение первых n минут переменная маркера помечается как 0, затем изменяется на 1. Это происходит внутри переменной ‘by’. Я хочу создать новую переменную, которая = 1 для каждой минуты с начала наблюдений группы ‘by’, пока переменная маркера не достигнет 1. Я перепробовал десятки комбинаций циклов выполнения и потерпел неудачу. Любая помощь будет оценена!
Комментарии:
1. Можете ли вы предоставить пример набора данных… как вы хотите, чтобы это выглядело в конце?
2. Для того, чтобы этот вопрос был хорошим вопросом, наверняка необходимы данные примера.
Ответ №1:
Из такого набора данных:
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
Из вашего набора данных путем сортировки by_var
и использования простого data
шага:
data my_data2;
set my_data;
by by_var;
if first.by_var then minute = 0;
minute 1;
output;
run;
Или вам нужно было изменить что-то подобное (с переменной времени):
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
код:
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;