*** 해결되었습니다. 그 답은 결국 첨부 될 것입니다. 도와 주셔서 감사합니다!SAS의 한 디렉토리에있는 여러 텍스트 파일의 특정 데이터 읽기
감사합니다. 나는 이전 동료가 남긴 코드 조각에 대해 연구 중이다.
목적은 하나의 디렉토리에있는 여러 텍스트 파일에서 특정 데이터 (예 : 행 1 & 열 17 및 행 12 & 열 33)를 읽고 데이터를 SAS 테이블에 저장하는 것입니다.
%macro cycle_through_server_records;
%local i next_file;
%do i=1 %to %sysfunc(countw(&SERVER_FILE)) ;
%let next_file = %scan(&SERVER_FILE, &i);
%let Ext =.TXT ;
DATA TEST.LIC_SERVER;
INFILE 'C:\Users\Name\Desktop\TEST\&next_file&..TXT' FIRSTOBS=1 OBS=12
MISSOVER;
INPUT
@17 DATA_FILE $11.///////////
@33 SERVER_RECORDS_COUNTS $9. ;
RUN;
PROC APPEND BASE=TEST.SERVER_FILE DATA=TEST.LIC_SERVER FORCE;
RUN;
%END;
%MEND cycle_through_server_records;
%cycle_through_server_records;
매크로 변수는 SQL 쿼리를 통해 메타 데이터 파일에서 설정됩니다. "실제 파일이 존재하지 않는, C : 이름 \ 바탕 화면 \ 테스트 \ & & next_file ..TXT \ 사용자 \ ERROR"
proc sql noprint;
select State
, compare_Date
, Data_Source
, Source_Date
, file_name
, Source_file_date
into :total_state separated by ' '
, :compare_date separated by ' '
, :Data_Src separated by ' '
, :Source_Cd_Date separated by ' '
, :Server_file separated by ' '
, :Src_file_dt separated by ' '
from AUTO_SDS.config
;
quit;
내가 SAS에서 그것을 실행 때마다, 나는이 오류 메시지가 나타납니다. 파일 경로에 어떤 문제가 있는지 잘 모르겠습니다.
또한 오류 메시지와 함께 코드를 실행할 수있었습니다. 그러나 단 하나의 텍스트 파일에서 9 개의 반복 행을 반환했습니다 (디렉토리에 여러 개의 텍스트 파일이 있음). 나는 붙어있다. 누군가가 문제 해결을 도와 주시겠습니까?
미리 감사드립니다.
나는 제안한 코드와 로그 파일을 게시하고 있습니다. 고맙습니다!
%LET Path_files = C:\Users\name\Desktop\TEST;
%macro cycle_through_server_records;
%local i next_file;
%do i=1 %to %sysfunc(countw(&SERVER_FILE)) ;
%let next_file = %scan(&SERVER_FILE, &i);
DATA TEST.LIC_SERVER;
INFILE "&Path_files\&next_file&..TXT" FIRSTOBS=1 OBS=12 MISSOVER;
INPUT
@17 DATA_FILE $11.///////////
@33 SERVER_RECORDS_COUNTS $9. ;
RUN;
PROC APPEND BASE=TEST.SERVER_FILE DATA=TEST.LIC_SERVER FORCE;
RUN;
%END;
%MEND cycle_through_server_records;
%cycle_through_server_records;
PROC SORT DATA=TEST.SERVER_FILE NODUP;
BY DATA_FILE;
RUN;
디렉토리에 22 개 파일이 있습니다, 그들의 이름은 다음 형식 "State_201708"모든 그리고 그들은 텍스트 문서 (.txt)로한다.
출력 데이터 세트 TEST.SERVER_FILE에는 하나의 파일 데이터 만 있습니다.
SAS 로그 :
디렉토리에 파일 8 건 (나는 하나의 파일의 데이터가 성공적으로 캡처있어 이후로는 8 왜 확실하지 않다, 대신 21) 8 오류 메시지가 있습니다. 오류 메시지는 다음과 같습니다.
오류 : 실제 파일이 존재하지 않습니다 (C : \ Users \ name \ Desktop \ TEST \ State_201708.TXT).
도움 주셔서 감사합니다.
*** 해결책 귀하의 모든 의견과 동료의 도움을 통해 디렉토리의 일부 파일에서만 작동하는 이유는 모두 발견 한 것이지만 전부는 아닙니다. Tom이 아래에서 지적했듯이 변수 SERVER_FILE (여기서 사용되지 않는 CONFIG 테이블에서)에서 정보를 검색하고있었습니다.
우리는 매크로를 만들기 전에 추가 단계를 추가하여 디렉토리에서 모든 파일 이름을 읽고이를 SAS 테이블에 저장했습니다. 그런 다음 해당 열을 변수로 바꿨습니다. SERVER_FILE을 새 변수 이름으로 대체하십시오. 이제 효과가있었습니다!
여기서 매크로 변수 SERVER_FILE을 (를) 설정하고 있습니까? – Tom
그건 아주 좋은 질문입니다! 내 동료 코드에서 매크로 변수 SERVER_FILE을 검색하고있었습니다. 코드의 다른 섹션에서만 한 번 나타났습니다. 아래 코드의 해당 부분을 첨부합니다. 감사! –
형식이 질량 일 경우 사과드립니다. 코멘트 섹션에 코드를 입력하는 방법을 모르겠습니다. 이 코드는 SERVER_FILE 변수가 AUTO_SDS.config 테이블에서 설정된다는 것을 보여 주며,이 작업은 내가하려고하는 목적에 필요하지 않습니다. 코드 : proc sql noprint;선택 상태, compare_Date, 데이터 _ 소스, 원본 _ 날짜, 파일 _ 이름, 원본 _ 파일 _ 날짜 입력 : total_state ',':로 구분 된 total_state '', :로 분리 된 Data_Src '', : '로 구분 된 Source_Cd_Date,': : Src_file_dt는 AUTO_SDS.config의 ' '으로 구분됩니다. 종료; –