У меня есть набор данных SAS (change_detail), который поддерживает переменные изменения и выглядит так (за исключением того, что в реальной таблице более 200 переменных изменений):
Reference Chg1Code Chg1Desc Chg2Code Chg2Desc Chg3Code Chg3Desc
--------- -------- -------- -------- -------- -------- --------
1234 C Change2
1234 C Change1 C Change2
1234 C Change1 C Change3
2345 C Change1 C Change3
2345 C Change3
3456 C Change2 C Change3
3456 C Change1 C Change2
3456 C Change1
3456 C Change1 C Change3
Мне нужно перевести эту информацию в сводку изменений, которые произошли с каждым ссылочным номером. Когда я использовал следующий PROC SQL в SAS:
proc sql;
create table work.changedata_summary as
select distinct
a.Reference,
catx(',',a.Chg1Desc,a.Chg2Desc,a.Chg3Desc) as Changes length=1000
from
work.change_detail a
;
quit;
Он объединяет отдельные переменные описания изменений, но сохраняет исходное количество наблюдений на номер ссылки. Результаты, которые я получаю:
Reference Changes
--------- -------
1234 Change2
1234 Change1,Change2
1234 Change1,Change3
2345 Change1,Change3
2345 Change3
3456 Change2,Change3
3456 Change1,Change2
3456 Change1
3456 Change1,Change3
Мне нужна помощь в выравнивании этих данных (с использованием PROC SQL или шага DATA), чтобы показать только сводные результаты по отдельному справочному номеру. Ожидаемый результат:
Reference Changes
--------- -----------------------
1234 Change1,Change2,Change3
2345 Change1,Change3
3456 Change1,Change2,Change3
Любая предоставленная помощь будет оценена по достоинству! Благодарность!
3 ответа
Если ваши данные примерно такие, то добавление группы к и max в ваш код должно работать
proc sql;
create table work.changedata_summary as
select
Reference,
catx(',',max(chg1Desc),max(Chg2Desc), max(Chg3Desc)) as Changes length=1000
from
have
group by Reference
;
quit;
Я бы использовал шаг данных для такой операции
Попробуйте это
data want;
length change_tot $200.;
do until (last.Reference);
set have;
by Reference notsorted;
change_tot=catx(',',change_tot,Chg1Desc, Chg2Desc, Chg3Desc);
end;
Keep reference change_tot;
run;
Я бы даже не попытался сделать такую вещь в PROC SQL. Если вы просто хотите увидеть последнее непустое изменение для каждой переменной, используйте шаг данных с оператором UPDATE, чтобы свести данные к одному наблюдению на группу.
data want ;
update have (obs=0) have ;
by reference ;
length changes $500 ;
changes=catx(',',of change1-change3);
run;
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.