2014-12-12 2 views
0

SAS에서는 일반적으로 몇 가지 중첩 된 명령을 사용하여 XML 데이터 문자열을 개별 변수로 구문 분석합니다.sas의 xml 문자열을 구문 분석합니다.

예를 들어 XML 문자열에서 "score"값을 추출하려고하면 다음 코드를 사용합니다.

var1 = put(compress(scan(substr(value,find(value,'<score>'),40),2,"><")),10.); 

위의 코드는 XML 문자열의 첫 번째 항목을 추출 작동하지만 데이터 문자열의 유형을 발생할 때

<score>25</score><score>72</score><score>43</score> 

내 코드의 한계는 명확하게. 데이터 집합에서 첫 번째 반복 만 추출 할 수 있으며이 매개 변수의 두 번째 및 세 번째 반복을 추출하는 방법을 모르겠습니다. 내 "점수"매개 변수의 두 번째 및 세 번째 반복 후에 SAS에 데이터를 가져 오도록 내 코드를 변경하려면 어떻게해야합니까?

위의 데이터는 내가 일하는 것을 완전히 대표하지는 않습니다. 내 자신의 데이터는 매개 변수의 반복 사이에 40-80자를 가질 수 있습니다.

+0

SAS XML Mapper 도구를 사용해 보셨습니까? Base SAS에 포함되어 있습니다. – Reeza

답변

0

XML의 XML 구문 분석에는 특정 XML 파일 구조, 원하는 결과 및 기능에 따라 많은 잠재적 경로가 있습니다.

가능한 경우 XML 맵을 구성하고 XML Libname 엔진을 첫 번째 옵션으로 사용하십시오. 그것은 매우 강력하고 매우 유용합니다. XML Mapper 유틸리티 (대부분의 SAS 설치와 함께 자유롭게 배포되지만, your_site가 설치하지 않는 경우)를 다운로드 할 수 있습니다. 예를 들어 9.2에 대한 링크는 here입니다. 귀하의 특정 버전은 같은 종류의 페이지와 링크를 갖게됩니다. 또는 SAS 기술 지원 담당자에게 문의하십시오.

어떤 이유로 든 가능하지 않은 경우 사용자 고유의 XML 맵을 만들 수도 있습니다. 그것을하기위한 웹 지침이 있습니다. 그것은 수동으로 일을 찾을 필요없이 데이터 세트에 열을 매핑하는 데 매우 강력한 XSL을 사용합니다.

그래도 작동하지 않으면 텍스트 구문 분석이 여러 가지 방법으로 가능합니다.

먼저 위의 방법이 가장 느리지 만 작동하지 않습니다 (FIND 사용). 일부 개선 사항으로는 SCAN 사용 및 구분자로 "<>" 표시가 있습니다.

두 번째로 입력 이름이 @"<score>" 일 수 있습니다. 그것은 매우 강력하며 기본적으로 <score>이 줄/필드 구분 기호 인 것처럼 행동 할 수 있습니다. 최신 버전의 SAS에서도 파일 이름에 DLMSTR= 옵션을 사용할 수 있으며 문자 그대로 구분 기호로 사용할 수 있습니다.

세 번째로 정규식을 사용할 수 있습니다. PRXMATCH 및 관련 내용은 여기에서 도움이 될 것입니다. 그 중 일부는 반복적으로 검색 할 수 있기 때문에 (일치하는 항목 1을 찾은 다음 2와 일치하는 ...). 그들은 완벽하지는 않지만 제한된 상황에서 잘 작동합니다. 그들은 다소 배우기가 어렵습니다. 그리고 저는 여기서 확실히 튜토리얼을 진행하지는 않을 것입니다.

위의 경우 입력 방법이 가장 간단하다고 생각합니다. 예를 들면 다음을보십시오.

data test; 
    input @"<score>" score 2. @@; 
datalines; 
<score>25</score><score>72</score><score>43</score> 
;;;; 
run; 

분명히 몇 가지 문제가있을 수 있지만 적어도이 특정 예에서는 효과적입니다.

관련 문제