Объединение двух наборов данных в переменной с различной длиной символов - PullRequest
0 голосов
/ 20 июня 2019

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

 FROM A   AS ROLLACT
    LEFT JOIN MALT.CUST            AS ACCOUNT   

    /*    ON  (ROLLACT.ACCTNO, BEST.)  = INPUT( ACCOUNT.ACCT_NO,BEST.) */
          ON  INPUT (ROLLACT.ACCTNO, 30.)  = INPUT( ACCOUNT.ACCT_NO,30.)

В этом случае ROLLACT.ACCTNO - это символьная переменная длиной 30, а ACCT_NO - это символьная переменная длиной 19.

Так что я запутался, почему не могу преобразовать оба значения в конкретную длину (используя Input (30.)) С помощью:

ON  INPUT (ROLLACT.ACCTNO, 30.)  = INPUT( ACCOUNT.ACCT_NO,30.)

Я также пытаюсь преобразовать оба в числовое значение с помощью:

 ON  (ROLLACT.ACCTNO, BEST.)  = INPUT( ACCOUNT.ACCT_NO,BEST.)

У кого-нибудь есть предложения о том, как сделать это на этапе Proc Sql?

Ответы [ 2 ]

1 голос
/ 20 июня 2019

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

Функция INPUT () не меняет длину. Если используется для преобразования строк в значения. Если вы используете числовую информацию, как в ваших примерах, то результатом будет число. Но вы не можете преобразовать 30-значную строку точно в число. SAS хранит числа в виде 8-байтовых значений с плавающей запятой, поэтому максимальное количество десятичных цифр точности равно 15.

0 голосов
/ 21 июня 2019

простой субстрат делает свое дело: ON (SUBSTR(ROLLACT.ACCTNO, 1,19)) = ACCOUNT.ACCT_NO

...