SAS proc sql конкатенация и присоединиться как

Я пытаюсь построить модель данных в структурах SAS для данных финансовой системы. Идея состоит в том, чтобы сохранить идентификаторы в таблице как символьное выражение, а затем создать протокол sql с внутренним соединением с ними из другой таблицы - аналогично должны получить идентификаторы, начинающиеся с выражения char "ID%". Proc SQL должен выглядеть следующим образом:

proc sql;
SELECT I.* 
  FORM tableWithIDs X INNER JOIN tableWithData I 
    ON I.ID LIKE X.ID||'%'
;
quit;

К сожалению, это должно выглядеть так: ... LIKE 'X.ID%' Есть ли способ создать такое выражение в коде SAS? ПОЖАЛУЙСТА ПОМОГИ!!!

2 ответа

Решение

Если вы сохраните значение X.ID||'%'вы, вероятно, обнаружите, что это выглядит как 1 % (для id=1). Попробуйте положить compress вокруг X.ID||'%' чтобы убрать лишние пробелы, вот так:

LIKE compress(X.ID || '%')

Я предполагаю, что у вас нет пустых символов в ваших идентификаторах.

Решение SAS для этого, если вы находитесь в версии 9, состоит в том, чтобы использовать функцию CATS вместо || конкатенации:

like cats(x.ID,'%')

У вас также есть оператор EQT, который по сути означает "начинается с" (усекает до равной длины, затем сравнивает):

on I.ID eqt x.ID

Это работает только в том случае, если x.ID имеет одинаковую длину или больше, чем I.ID, потому что он будет обрезаться в зависимости от того, что длиннее. Если I.ID - более длинная строка, скажем "Member", а x.ID - "Mem", сравнение будет действительным, и LIKE не сочтет его действительным.

Другие вопросы по тегам