Мне нужно найти min_week, когда счетчик равен 0, и значение недели этой строки должно продолжаться до тех пор, пока счетчик снова не станет 0.
Ниже приведен пример вывода, который я ищу:
В моем текущем выводе со следующим кодом я получаю вывод как:
proc sql;
create table week_min_1 as
select t1.*, t2.week as min_week from emp_table t1
left join (select * from emp_table where counter = 0 group by emp having sequence = min(sequence)) t2
on t1.emp= t2.emp
;
quit;
Будет ли случай, когда неделя увеличится?
min_week: нет, это не должно быть одинаковым, и оно должно меняться каждый раз, когда счетчик переходит от 0 к 1 и т. д., принимая данные за неделю как min_week. неделя: Нет, это все записи, которые мы ожидаем от emp. Спасибо за вашу помощь.
Давайте сначала создадим ваши образцы данных:
data have;
input Emp $ Sequence Week Counter;
datalines;
a001 1 2 0
a001 2 4 1
a001 3 8 2
a001 4 12 3
a001 5 24 0
a001 6 36 1
a001 7 48 2
a001 8 52 3
;
run;
Теперь нам нужно отсортировать наши данные. В этом образце он уже отсортирован, но лучше перестраховаться, чем потом сожалеть.
proc sort data=have;
by Emp Sequence;
run;
С помощью простого оператора if мы идентифицируем эти значения min_week.
data have2;
set have;
if counter = 0 then do;
min_week = Week;
end;
run;
И с оператором обновления мы помещаем эти значения в каждую строку.
data want;
update have2 (obs=0) have2;
by Emp;
output;
run;
min_week одинаков для всех emp или он когда-либо меняется?