특정 캘린더에 대한 모든 공휴일이 포함 된 캘린더 파일을 공급 업체로부터 받았습니다.
파일에는 파이프 (|)로 구분 된 7 개의 열이 있습니다. 그러나 실제 공휴일을 포함하는 열 7은 세미콜론 (;)으로 구분 된 문자열 형식으로 제공됩니다.
내 문제는 열 7의 길이가 32.767보다 크다는 것입니다. 그러면 지금까지 일부 배열 및 전치 트릭을 사용하여 수행 한 솔루션이 더 이상 작동하지 않습니다.
기본적으로 텍스트 파일은 다음과 같습니다.
INTERNAL_NAME|ERROR_CODE|NUMBER_OF_FIELDS|CALENDAR_CODE|CALENDAR_TYPE|CALENDAR_NAME|DATES
US|0|4|US|Country|United States|;2;15728;1;5;19440101;5;19440102;5;19440103;5;19440108;5;19440109......etc.
그러나 열 7은 배열 / 행렬의 크기가 주어지고 구분 기호가 문자열의 시작 부분에 주어 지도록 좋은 형식으로 전달됩니다.
* 첫 번째 문자 = 구분자->;
* 행렬의 차원 수-> 2
* 행렬 수-> 15.728
* 열 수-> 1
* 데이터 요소 + 데이터-> 5 = 날짜 및 데이터 = 01JAN1944 등
내 원하는 결과는 다음과 같은 데이터 세트가 될 것입니다.
INTERNAL_NAME DATES
US 01JAN1944
US 02JAN1944
US 03JAN1944
US 08JAN1944
15.728 관측 값을 읽을 때까지 등 .....
이것은 상당히 쉽게 할 수 있습니다.
즉, 필드가 그대로 있다고 가정하는 수동 솔루션은 보조 구분 기호 ( ;
)를 사용한 다음 더 짧은 것으로 알려져 있으므로 나중에 직접 해당 초기 문자열을 구문 분석 할 수 있습니다. 그런 다음 @
줄을 유지하는 데 사용하여 해당 문자열의 입력을 반복합니다 .
data want;
infile datalines4 dlm=';' truncover;
length initial_string $500;
input initial_String $ @;
input dim row col @;
do _n_ = 1 by 1 until (missing(holiday_date));
input col_type holiday_Date @;
if not missing(holiday_date) then output;
end;
datalines4;
US|0|4|US|Country|United States|;2;15728;1;5;19440101;5;19440102;5;19440103;5;19440108;5;19440109
;;;;
run;
구분 기호 / 등에 대해 알려주는 정보를 사용하려는 경우. readin을 구동하기 위해 그렇게 할 수는 있지만 데이터 파일에 대해 두 번의 패스가 필요합니다 (제한된 가능성 집합이 있고 제한된 입력 문 집합과 함께 if / else 분기를 사용할 수있는 경우가 아니라면). 한 번의 패스는 해당 부분 만 읽은 다음 매크로를 호출하여 별도의 데이터 단계에서 나머지 부분을 읽습니다. 그러나 이것이 항상 파일의 형식이고 해당 필드에 대해 실제로 신경 쓰지 않는 경우-해당 필드에 대해 작업해야합니다. 위의 내용이 더 빠르고 덜 복잡하기 때문에 더 좋습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다