Как связать строки с более чем 2 таблицами с помощью prosql в SAS

#merge #sas #row

Вопрос:

У меня есть несколько таблиц , например Table1 Table2 Table3 , Table4 в них одни и те же столбцы в одном и том же порядке. Я хочу связать их вертикально, я понятия не имею, как это сделать. Я попробовал этот код:

 PROC SQL;    create table Table_final AS   (    select * from Table1    union all   select * Table2     union all   select * Table3     union all   select * Table4    );    QUIT;  

Но это не работает

Комментарии:

1. По какой причине вы не можете использовать шаг данных SAS? Это делается гораздо проще…

2. Я делаю запрос к базе данных. Могу ли я использовать код, отличный от PROC SQL

3. Конечно. Покажите более подробную информацию о том, как будет выглядеть ваш код, с именами библиотек/подключитесь к/и т.д. Там.

4. Как это не работает? Вы получали сообщения об ошибках? опубликуйте журнал. Неправильные результаты? Объясните, как это неправильно.

5. Спасибо всем; Я решаю проблему другим способом (самым длинным способом), связывая таблицы по две; то есть я связал две первые таблицы, затем я привязал третью к созданной таблице и так далее.

Ответ №1:

Рад, что вы решили проблему самостоятельно альтернативным способом. Однако вы допустили несколько синтаксических ошибок, проигнорировав FROM инструкцию в своем запросе.

Вот ваш обновленный код:

 PROC SQL;  create table Table_final AS  (   select * from Table1   union all  select * from Table2   union all  select * from Table3   union all  select * from Table4   );  QUIT;  

Это сработало для меня.

Ответ №2:

Шаги SQL или обработки данных не очень эффективны, поскольку они обрабатывают данные строка за строкой. Вместо этого самый быстрый метод-объединить их по одному, используя PROC APPEND. Это копирует данные блок за блоком, а не по одной строке за раз. Обратите внимание, что Базовая таблица не обязательно должна существовать до этой процедуры.

 proc append base=table_final data=data1; run; proc append base=table_final data=data2; run; proc append base=table_final data=data3; run;