2014-11-08 4 views
1

안녕하세요 데이터 SAS 사용자가

나는 SAS에 대한 읽기 및 전화 번호의 형태로하려고 메신저를 CSV가에서 읽기에 문제가 (###) ### - #### 그리고 # 만 읽는 정보를 만들고 싶습니다.

답변

1

이 형식의 정보를 만드는 유일한 방법은 일치시킬 모든 가능한 전화 번호에 대해 개별 문자열과 정보 값을 지정하는 것입니다.이 방법은 분명히 실용적인 방법이 아닙니다.

그러나 원시 가져온 텍스트의 자릿수 만 포함하는 새 변수를 쉽게 만들 수 있습니다 (예 :

data _null_; 
    phone_raw = '(123)456-7890'; 
    length phone_digits $10; 
    phone_digits = compress(phone_raw,,'dk'); 
    put phone_raw=/phone_digits=; 
run; 
1

에만 문자를 제거하고 정보 흐름을 만들 수는 숫자를 읽습니다

proc format; 
    invalue comph (default=20) 
    's/\D//' (regexpe) = _same_; 
run; 
data _null_; 
    a=input("(423)456-7890",comph.); 
    put a=; 
run; 

예를 출력 번호를 올바르게. 전화 번호 확인은 수행되지 않습니다. 이상한 문자열 '/ \ D //'는 정규 표현식이므로 다음과 같이 읽어야합니다. 모든 비 숫자 (\ D)를 아무 것도 대체하지 마십시오.

+1

일부 데이터 유효성 검사도 수행하려는 경우 함수를 작성하고 해당 정보를 informat에서 사용할 수 있습니다. 이 예는 (사용자 작성) 함수 tsgn의 출력을 invalue : proc 형식으로 사용하는 informat, tsgn을 작성합니다. invalue tsgn (기본값 = 10) other = [tsgn()]; –

+1

니스 - informats가 정규 표현식을 포함 할 수 있음을 깨닫지 못했습니다! –