Эффективный способ объединения / объединения 2 больших наборов данных в SAS 8.2 - PullRequest
1 голос
/ 11 февраля 2009

Я пробовал следующие варианты с недопустимым временем ответа - создание индекса 'ключ' также не помогло (ПРИМЕЧАНИЕ: дубликаты 'ключей' в обоих наборах данных):

data a;
merge b
      c;
by key
if b;
run;

=== ИЛИ ===

proc sql;
create a
as select * 
from b
left outer join c
on b.key;
quit;

Ответы [ 5 ]

1 голос
/ 11 февраля 2009

Не забудьте урезать свой набор данных как можно больше. Сортируйте ваш набор данных перед шагом данных или процедурой sql. Кроме того, я не на 100%, если это имеет значение, но ANSI SQL будет proc sql; create a as select * from b left outer join c on b.key=C.KEY; quit;

1 голос
/ 11 февраля 2009

Вы должны сначала отсортировать два набора данных, прежде чем объединять их. Это то, что даст производительность. использование индекса, когда вам приходится сканировать всю таблицу, чтобы получить результат, обычно медленнее, чем предварительная сортировка наборов данных и их объединение.

0 голосов
/ 29 сентября 2009

Не используйте шаг слияния данных для этого.
С дублирующимися ключами в обоих наборах данных результат будет неправильным.
Единственный способ сделать это с помощью

Proc SQL;   
  Create table newdata    
  as select firsttable.aster, secondtable.aster    
  from table1 as firsttable   
  inner join table2 as secondtable    
  on (firstable.keyfield = secondtable.keyfield);   
quit;

Если у вас есть более одного ключевого поля, порядок соединения должен быть от поля наименьшего соответствия сначала до поля наибольшего соответствия в последнюю очередь. У SAS есть плохой навык создания временного набора данных, содержащего все возможные совпадения, и последующего анализа. Может взорвать ваше временное пространство и замедлить все.

Если вы все еще хотите использовать шаг DATA, вам нужно избавиться от дубликатов ключей в одном из наборов данных.

0 голосов
/ 07 апреля 2009

Вы можете попробовать слияние SQL. Я не знаю, будет ли это быстрее для ваших нужд, но я обнаружил, что SQL гораздо эффективнее, чем обычное слияние SAS. Кроме того, как только вы поймете, что вы можете делать с SQL, управление наборами данных становится проще!

0 голосов
/ 11 февраля 2009

Создание ключа - это самый быстрый способ подготовить наборы данных для присоединения. Их сортировка может занять столько же времени, сколько и их объединение, если не дольше, но все же это хорошая идея.

AFHood предлагает обрезать их, это хорошо. Можете ли вы провести их через резюме процесса? Есть ли какие-нибудь столбцы, которые вы можете удалить? Любой из них уменьшит размер вашего набора данных и ускорит слияние.

Однако ни один из этих методов не может работать. Я обычно объединяю файлы из нескольких миллионов строк, и это может занять некоторое время.

...