2017-03-27 1 views
2

좋은 숫자 형식을 유지하면서 숫자를 문자열로 변경해야하는 경우가 있습니다 (예 : 구문을 통해 작성된 문장에 배치하기 위해). 그것은 예를 들어, 형식의 소수 부분을 유지하기 쉬운 충분 : 숫자를 문자열로 변경할 때 숫자 서식 유지

string MyTextN (a10). 
compute MyTextN=string(MyNumericN, f10.2). 

그렇게 12345.6789 같은 번호가이 텍스트로 저장됩니다 "12345.68". 제가 누락 된 것은 1000의 구분 기호입니다. 본문은 다음과 같습니다 : "12,345.68". 지금 당장 나는 이것을 얻기 위해 텍스트 조작을하고있다. (일반적으로 숫자를 반복하고 4 번째와 7 번째 앞에 쉼표를 넣는다.) 하지만 내장 함수가 있는지 알고 싶지 않다. 또는 누군가가 지름길을 제안 할 수 있다면? 감사합니다.

답변

2

불행하게도 변환 시스템과 백엔드는 일반적으로 숫자 그룹화 설정에 대해 알지 못하므로 문자열 기능이이를 무시합니다 (대부분의 경우 원하는 사항).

당신은, 예를 들어,이 파이썬을 사용할 수 있습니다

'{:,}'.format(123456789) 

가 과잉 될 수도 있지만 '123456789'는

SPSSINC TRANS 명령

는이 작업을 수행하는 데 사용할 수

.

다음은 예제입니다. 여기서 x는 문자열로 변환 할 변수입니다.

begin program. 
def strWSeparators(x): 
    if x is not None: 
     return '{:,}'.format(x) 
    else: 
     return None 
end program. 

spssinc trans result=y type=15 
/formula "strWSeparators(x)". 

결과는 15 바이트 문자열 변수, y는,

+0

덕분에, "SPSSINC TRANS"함께 작업하는 아름다운 작품이다. 한 가지 문제는 누락 된 값이 프로세스를 중단한다는 것입니다. 프로세스를 무시하는 방법을 제안 할 수 있습니까? –

+0

누락 된 데이터를 허용하도록 코드를 업데이트했습니다. 시스템 누락 값은 없음으로 제공됩니다. 사용자 누락은 그대로이지만 명령의 주요 부분에서 USERMISSING = SYSMIS를 지정하여 해당 동작을 변경하십시오. – JKP

+0

Hmmmm .... "TRANS"에 대한 최신 버전을 재설치하고 이것을 실행했습니다 : spssinc trans result = N1T type = 15 USERMISSING = SYSMIS/formula "strWSeparators (N1)". 첫 번째 누락 값, 다음이 메시지를주는 중지합니다. _ 수식이 정의되지 않은 변수를 참조하거나 평가할 수 없습니다 : ',' 's'._ 지정할 수 없습니다. 내가 뭘 놓치고 있니? –