Intereting Posts
Как найти записи, которые не объединены? Как преобразовать все таблицы в базу данных в одну сортировку? Увеличение времени ожидания команды для команды SQL Hibernate выполнить обновление с помощью критериев одиночные кавычки появляются arround значение после запуска копирования в postgres 9.2 JPA (Hibernate) Собственный запрос для подготовленного заявления SLOW Ошибка в списке аргументов функции: '=' не распознается. не удалось выполнить синтаксический анализ текста запроса. – Адаптер таблицы C # Обновить столбец таблицы со столбцом другой таблицы в PostgreSQL sql ORDER BY несколько значений в определенном порядке? Использование имен столбцов sql в hibernate createSQlquery result Есть ли разница между GROUP BY и DISTINCT Базовые значения базы данных Rails Как написать функцию в базе данных H2 без использования Java ASP.NET MVC 4 сохраняет 3 знака после запятой в SQL Server 2005 Как создать временной ряд в Access и использовать его в запросе

эффективно транспонировать с помощью proc sql

я хотел бы знать, можно ли эффективно транспонировать из широкого в длинный, используя proc sql в sas.

Я знаю, что proc transpose намного быстрее, чем метод, который я предлагаю ниже. Но одна из моих целей заключалась бы в том, чтобы избежать хранения транспонированной таблицы.

Скажем, например, что у меня есть таблица1 как

Id| A| B| C| D _____________________ 1| 100|3500|6900| 10300 2| 200| 250| 300| 350 3| 150| 32| 400| 204 4| 200| 800|1400| 2000 

и я хочу превратить его в

 id|col1| col2| ______________ 1| A| 100| 1| B| 3500| 1| C| 6900| 1| D| 10300| 2| A| 200| 2| B| 250| 2| C| 300| 2| D| 350| 3| A| 150| 3| B| 32| 3| C| 400| 3| D| 204| 4| A| 200| 4| B| 800| 4| C| 1400| 4| D| 2000| 

Я мог бы это сделать;

выберите id, 'A' как col1, A как col2
из таблицы1
где A ~ = ""
union select id, 'B' в качестве col1, B как col2
из таблицы1
где B ~ = ""
и т.д

но он крайне неэффективен.

Есть идеи? Благодарю.

Если вы находитесь в SAS , используйте PROC TRANSPOSE для этой опции. В PROC SQL; нет особого способа сделать это PROC SQL; в то время как многие варианты SQL имеют свой собственный способ сворачивания данных, SAS имеет PROC TRANSPOSE и ожидает, что вы его используете.

SAS datastep также делает это очень эффективно, возможно, даже лучше, чем PROC TRANSPOSE . Вот пример, в том числе создание представления, как указано в комментариях.

 data want/view=want; set have; array vars abcd; *array of your columns to transpose; do _t = 1 to dim(vars); *iterate over the array (dim(vars) gives # of elements); if not missing(vars[_t]) then do; *if the current array element's value is nonmissing; col1=vname(vars[_t]); *then store the variable name from that array element in a var; col2=vars[_t]; *and store the value from that array element in another var; output; *and finally output that as a new row; end; end; drop abcd _t; *Drop the old vars (cols) and the dummy variable _t; run; 

Сегодня я действительно делал что-то подобное. Попробуйте сделать это,

 proc transpose data = ORIGINAL_DATA; out = NEW_DATA; by id; VAR AD; run; 

Я думаю, что это должно сработать.