SAS에서 PROC SQL 문을 사용할 때 변수를 숫자에서 숫자로 또는 그 반대로 변환해야하는 경우가 있습니다.변수 유형을 문자에서 숫자로 변환하여 SAS에서 불확실한 길이로 변환
INPUT(A.KEY_ID, 8.) = B.KEY_ID
또는 변수의 길이가 중 7 또는 8 인 경우 내 질문은, 어떤 길이 내가 KEY_ID 후 넣어야한다
A.KEY_ID = PUT(B.KEY_ID, 8.)
: 나는 일반적으로 다음과 같은 두 개의 쿼리를 사용할 수 있습니까? 나는 A.KEY_ID = PUT (B.KEY_ID, 7.)을 시도했으며 KEY_ID 길이가 8 인 모든 레코드를 잃어 버렸다. 그리고 A.KEY_ID = PUT (B.KEY_ID, 8.)을 사용할 때 길이가 7 인 해당 KEY_ID를 찾을 수 없습니다.
대단히 감사합니다!
추가 :
다음은 현재 사용중인 쿼리입니다. LibnameA는 로컬 라이브러리이고 tableA는 로컬 SAS 테이블입니다. DatabaseB는 내가 연결되어있는 데이터베이스입니다. Key_id 열은 두 테이블에 있으며 키를 연결하는 데 사용됩니다. 예를 들어, key_ids는 1234567, 12345678 및 ect입니다.
put 문 끝 부분에 길이 7을 넣은 다음 쿼리를 사용했을 때 key_ids가 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;
업데이트 결과 : 나는 다음과 같은 쿼리를 사용하는 경우, 그것은 192,758 행
ON A.KEY_ID = PUT(B.KEY_ID,7.)
나는 다음과 같은 쿼리를 사용하는 경우
을 반환, 그것은 192,923 행
ON A.KEY_ID = PUT(B.KEY_ID,8.)
을 반환 다음 쿼리를 사용하면 192757 행을 반환합니다.
나는 다음과 같은 쿼리를 사용하는 경우 10ON INPUT(A.KEY_ID,8.) = B.KEY_ID
, 그것은 192,757 행
ON A.KEY_ID = COMPRESS(PUT(B.KEY_ID,8.))
나는 다음과 같은 쿼리를 사용하는 경우
, 그것은 192,757 행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 당신이 볼 수 있듯이 OWS
ON A.KEY_ID = PUT(B.KEY_ID,8.-L)
, 나는 A.KEY_ID = PUT (B.KEY_ID, 8.)을 사용하는 경우에만, 그것은, 그러나 테이블 A. 모든 행을 인 192,923 행을 반환 테이블 B에서 해당 key_ids를 찾지 못하며 최종 결과에 null 값을 반환합니다.
대부분의 A.KEY_ID에는 선행 공백이 저장된 7 자리 문자열이 없지만 8. 형식의 PUT() 함수는 10,000,000보다 작은 숫자의 선행 공백을 생성합니다. – Tom
@ 톰 - 그건 내 생각이기도하지만 OP는 조인 기준에서 공백을 제거 할 때 작동하지 않는다고 말합니다. – vknowles