全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1488 2
2018-07-02
本人新人,下面这段前人的程序目的在于把观测数写入文件名,但是目前只能运用于文件夹下的第一个文件,我想做个循环遍历所有文件,不知道应该在哪里更改一下,求指点啊,谢谢!

/**********************************************************************************/
/* 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.");

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2018-7-3 16:00:17
稍微顶一下,期待高手
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2018-7-5 12:06:22
我正在写一个用sas循例一个路径下所有文件并检测文件大小、最后修改时间然后自动删除老旧大文件的paper,等接受了再把code分享给你哈
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群