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 не сочтет его действительным.