本人新人,下面这段前人的程序目的在于把观测数写入文件名,但是目前只能运用于文件夹下的第一个文件,我想做个循环遍历所有文件,不知道应该在哪里更改一下,求指点啊,谢谢!
/**********************************************************************************/
/* Collect the list of files ending with ".cum" in delivery folder */
/**********************************************************************************/
%LET FROM_LOC = &directory;
%LET INPUT_PARAM = *.cum;
FILENAME deliv PIPE "dir &FROM_LOC\&INPUT_PARAM /b";
DATA _null_;
LENGTH filename $1000;
INFILE deliv;
INPUT filename $;
if _error_ ne 0 then do;
_error_=0;
delete;
put "Not processed: No file in delivery folder corresponds to &INPUT_PARAM";
end;
call symput ('INPUT_FILE',trim(left(filename)));
RUN;
%put Processing &INPUT_FILE.;
/**********************************************************************************/
/* PROTOCOL - MAKE SURE INPUT FILE IS PRESENT BEFORE PROCESSING DATA */
/**********************************************************************************/
%IF %SYSFUNC(FILEEXIST(&directory\&INPUT_FILE.)) %THEN %DO;
/********************************************************************************/
/* PROTOCOL - REASSIGN LOG AND LIS FILES TO NEW FILENAMES */
/********************************************************************************/
FILENAME OUTLOG "&directory\LOGLIS\&INPUT_FILE..LOG";
PROC PRINTTO LOG=OUTLOG NEW;
RUN;
FILENAME OUTLIS "&directory\LOGLIS\&INPUT_FILE..LIS";
PROC PRINTTO PRINT=OUTLIS NEW;
RUN;
/********************************************************************************/
/* PROTOCOL - ADD CODE FOR SAS7BDAT */
/********************************************************************************/
LIBNAME OUTLIB V8 "&directory";
/********************************************************************************/
/* PROTOCOL - BEGIN PROCESSING */
/********************************************************************************/
%PUT NOTE: Begin processing of file: %SCAN(&_files,1, ' ');
PROC IMPORT OUT= WORK.COUNTFILE
DATAFILE= "&directory\&INPUT_FILE."
DBMS=DLM;
GETNAMES=NO;
DATAROW=1;
GUESSINGROWS=32767;
RUN;
/********************************************************************************/
/* PROTOCOL - COUNT NUMBER OF RECORDS */
/********************************************************************************/
%global COUNTOBS;
%COUNT_RECORDS(_INPUT_DS=WORK.COUNTFILE,_COUNT=COUNTOBS);
%PUT CDMINFO: COUNTFILE CONTAINS &COUNTOBS RECORDS.;
/********************************************************************************/
/* PROTOCOL - PRINT DATA IN LIS */
/********************************************************************************/
%PRINT_CLIENT_DATA(
_TITLE= COVANCE CDM DEPT. PROTOCOL &INPUT_FILE.,
_DS=WORK.COUNTFILE,
_OBS_N=32);
/********************************************************************************/
/* PROTOCOL - RENAME TEXT FILE WITH NUMBER OF RECORDS */
/* ADDED BY F.TASSY 21JUL2016 */
/********************************************************************************/
/* Create the name using COUNTOBS macrovariable */
%LET NEWNAME = %SYSFUNC(TRANWRD(&INPUT_FILE.,RECCOUNT,&COUNTOBS.));
/* Rename the file */
%SYSEXEC %STR(rename "&directory\&INPUT_FILE." "&NEWNAME.");