2014-02-06 5 views
0

Мне нужна помощь с proc SQL. У меня есть таблица, как этотСлияние двух таблиц при некоторых условиях

ID1 ID2   DR1 DR2 
    1 03/04/2009 158  0 
    2 12/06/2009 214  0 
    2 05/02/2009  59  0 
    1 03/04/2009  0 158 
    2 03/04/2009 225  0 

и я хотел бы создать новую таблицу с каждой строкой, где DR2 не нулевые, и для каждого из них линии, поиска, если есть еще одна линия с тем же ID1 и ID2 и с DR1, равным значению DR2.

Для этого примера, это дало бы мне эту таблицу:

ID1 ID2   DR1 DR2 
    1 03/04/2009  0 158 
    1 03/04/2009 158  0 

Я пытался сделать это в два этапа, но без успеха:

data tmpTable; 
    set Table; 
    where DR2>0; 
run; 

proc sql; 
    create table wanted as 
    select * from tmpTable 
    inner join Table on Table.ID1 = tmpTable.ID1 
         and Table.ID2 = tmpTable.ID2 
         and Table.DR1 = tmpTable.DR2; 
quit; 

ответ

1

Получить работу запроса, то вы можете просто добавить создать таблицу его версии.

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

SELECT 
     t1.d1, 
     t1.id2, 
     t1.dr1, 
     t1.dr2 
    from 
     Table t1 
     JOIN Table t2 
      ON t1.d1 = t2.d1 
      AND t1.dr1 = t2.dr2 
      AND t1.dr2 = t2.dr1 
    where 
     t1.dr1 > 0 
     OR t2.dr2 > 0 

Я бы удостоверился, что у вас есть указатель на (d1, dr1, dr2) для достижения целей.

Вы упомянули, что вам нужны только записи, в которых DR2 имеет значение (не ноль/нуль). Предложение where гарантирует, что значение AT LEAST равно одному из столбцов. Таким образом, в вашем примере он найдет значение 158/0 (ноль во втором столбце), но наоборот (0,158) ваш квалификационный DR2 не равен нулю.

ТОЛЬКО время, когда будут возвращены обе версии, когда обратная сторона также отображается как объединенная таблица.

1

Вы можете просто сливаться файл на себя с правильные где заявления.

Обратите внимание, что null является . не 0 - (Ваш шаг данных ликвидирует строки, где dr2 = 0 сделать свой результат таблицу невозможно)

proc sql; 
    create table wanted as 
    select distinct * 
    from table_have a, table_have b 
    where 
      a.id1 = b.id1 
     and 
      a.ID2 = b.ID2 
     and 
      a.DR2 = b.DR1 
     and 
      a.dr2 ne . 
    ; 
quit; 
Смежные вопросы