Существует таблица с идентификатором, событием, датой.
Текущий сценарий подсчитывает события по идентификатору, типу события и дате, транспонирует и затем маркирует каждый идентификатор по комбинации типов событий в этот день.
Проблема заключается в том, что это происходит, если появляются новые типы событий.
Я надеюсь найти метод, который берет все имена столбцов с ненулевым количеством и объединяет их.В идеале этот метод не требует жесткого кодирования событий.
data test;
infile datalines delimiter=':' truncover;
informat id 10. event_dt DDMMYY10. event_type $10. event $10.;
input id event_dt event_type event;
datalines;
1:01-03-2017:BB:b1
1:01-03-2017:AA:A2
1:02-03-2017:CC:C1
2:01-03-2017:CC:C2
3:03-03-2017:BB:b2
4:02-03-2017:AA:A1
;
run;
proc sql;
create table test2 as
select distinct ID, event_dt format worddate. as event_dt, event_type, count(distinct event) as event_count
from test
group by ID, event_dt, event_type;
quit;
proc transpose data=test2 out=test3 (drop = _name_);
by id event_dt;
id event_type;
run;
proc stdize data=test3 out=test3z reponly missing=0;
run;
proc sql;
create table test4 as
select event_dt,
case when AA = 0 and BB = 0 and CC = 0 then 'No Event'
when AA = 0 and BB = 0 and CC > 0 then 'CC only'
when AA = 0 and BB > 0 and CC = 0 then 'BB only'
when AA = 0 and BB > 0 and CC > 0 then 'BB & CC'
when AA > 0 and BB = 0 and CC = 0 then 'AA only'
when AA > 0 and BB = 0 and CC > 0 then 'AA & CC'
when AA > 0 and BB > 0 and CC = 0 then 'AA & BB'
when AA > 0 and BB > 0 and CC > 0 then 'AA & BB & CC'
else 'Other' end as tag, count(id) as ID_COUNT
from test3z group by
event_dt,
case when AA = 0 and BB = 0 and CC = 0 then 'No Event'
when AA = 0 and BB = 0 and CC > 0 then 'CC only'
when AA = 0 and BB > 0 and CC = 0 then 'BB only'
when AA = 0 and BB > 0 and CC > 0 then 'BB & CC'
when AA > 0 and BB = 0 and CC = 0 then 'AA only'
when AA > 0 and BB = 0 and CC > 0 then 'AA & CC'
when AA > 0 and BB > 0 and CC = 0 then 'AA & BB'
when AA > 0 and BB > 0 and CC > 0 then 'AA & BB & CC'
else 'Other' end;
quit;
Спасибо, Бен