Когда я использую инструкцию PROC SQL в SAS, иногда мне нужно преобразовать переменную из символа в числовой или наоборот. Я обычно использую следующие два запроса:Преобразование типов переменных из символа в числовое с неопределенной длиной в SAS
INPUT(A.KEY_ID, 8.) = B.KEY_ID
ИЛИ
A.KEY_ID = PUT(B.KEY_ID, 8.)
Мой вопрос, если длина переменной либо 7 или 8, какой длины я должен поставить после KEY_ID? Я попробовал A.KEY_ID = PUT (B.KEY_ID, 7.), и он потерял все записи с длиной KEY_ID = 8. И когда я использовал A.KEY_ID = PUT (B.KEY_ID, 8.), он не сможет найти соответствующий KEY_ID с длиной = 7.
спасибо!
Добавлено:
Ниже запрос, который я в настоящее время использую. LibnameA - это локальная библиотека, а tableA - локальная таблица SAS. DatabaseB - это база данных, с которой я связан. Столбец Key_id находится в обеих таблицах и используется в качестве ключа для их связывания. Например, key_ids - 1234567, 12345678 и ect.
Когда я использовал следующий запрос, в который я положил длину 7 в конце оператора put, все записи с 8-значными ключами не смогут найти совпадение.
PROC SQL;
CREATE TABLE LIBNAMEA.WORKTABLE AS
SELECT
A.*,
B.VAR1,
B.VAR2
FROM LIBNAMEA.TABLEA A
LEFT JOIN DATABASEb.TABLEB B
ON A.KEY_ID = PUT(B.KEY_ID,8.)
;
QUIT;
Update Результаты:
Если я использую следующий запрос, он возвращает 192758 строк
ON A.KEY_ID = PUT(B.KEY_ID,7.)
Если я использую следующий запрос, он возвращает 192923 строк
ON A.KEY_ID = PUT(B.KEY_ID,8.)
Если я использую следующий запрос, он возвращает 192757 строк
ON INPUT(A.KEY_ID,8.) = B.KEY_ID
Если я использую следующий запрос, он возвращает 192757 строк
ON A.KEY_ID = COMPRESS(PUT(B.KEY_ID,8.))
Если я использую следующий запрос, он возвращает 192757 строк
ON COMPRESS(A.KEY_ID) = COMPRESS(PUT(B.KEY_ID,8.))
Если я использую следующий запрос, он возвращает 192757 строк
ON INPUT(CATS(A.KEY_ID),8.) = INPUT(CATS(B.KEY_ID),8.)
Если я использую следующий запрос, он возвращает 192757 r РМО
ON A.KEY_ID = PUT(B.KEY_ID,8.-L)
Как вы можете видеть, только когда я использую ON A.KEY_ID = PUT (B.KEY_ID, 8.), она возвратит 192923 строк, что все строки из таблицы А. Тем не менее, не найдет соответствующие ключевые слова в таблице B и не вернет нулевое значение в конечных результатах.
Скорее всего, у A.KEY_ID нет семизначных строк, хранящихся в ведущих пространствах, но функция PUT() с форматом 8. генерирует ведущие пробелы для числа менее 10 000 000. – Tom
@Tom - Это тоже мое мышление, но OP говорит, что он не работает, когда он удаляет пробелы в критериях соединения. – vknowles