首页 > 代码库 > SAS:多个LOG的批量查询

SAS:多个LOG的批量查询

OPTIONS PS=MAX LS=MAX NOCENTER SASMSTORE=SASUSER MSTORED MAUTOSOURCE;

/*获取指定文件夹的指定类型的所有文件*/

%MACRO GET_NAME(DIRNAME,TYP,OUT_TABLE)/STORE;/*参数有两个:路径,文件类型后缀*/   

%PUT %STR(----------->DIRNAME=&DIRNAME)        ;   

%PUT %STR(----------->TYP=&TYP)                ;   

DATA TEMP;       

RC=FILENAME("DIR","&DIRNAME");/*把&DIRNAME值传给文件引用符“DIR"*/      

OPENFILE=DOPEN("DIR");/*得到路径标示符OPENFILE,DOPEN是打开directory的sas内置函数*/   

IF OPENFILE>0 THEN DO;/*如果OPENFILE>0表示正确打开路径*/            

NUMMEM=DNUM(OPENFILE);/*得到路径标示符OPENFILE中member的个数nummem*/            

DO II=1 TO NUMMEM;                  

NAME=DREAD(OPENFILE,II);/*用DREAD依次读取每个文件的名字到NAME*/                 

filepath="&DIRNAME"||NAME;        

fnum=compress(NAME,".xml","");        

fnum=compress(fnum,"user_case","");                

OUTPUT;/*依次输出*/     

END;   

END;   

KEEP NAME filepath fnum;/*只保留filepath、fnum列*/

RUN;

PROC SORT DATA=http://www.mamicode.com/TEMP;/*按照NAME排序*/

BY DESCENDING NAME;    

%IF &TYP^=ALL %THEN %DO;/*是否过滤特定的文件类型&TYP*/        

WHERE  INDEX(UPCASE(NAME),UPCASE(".&TYP"));/*Y,则通过检索NAME是否包含&TYP的方式过滤文件类型*/    

%END; RUN;

DATA &OUT_TABLE(KEEP=NAME ID);  

SET TEMP;  

ID=_N_;

RUN;

PROC PRINT DATA=http://www.mamicode.com/&OUT_TABLE;

RUN;

%MEND;  

/*查询LOG中的error与warning*/

%MACRO CHECK_LOG0(P,LOG_PATH)/STORE;

%IF &P=1 %THEN;

%ELSE %DO;  

DM ‘log;"clear";‘;  RUN; QUIT;

%END;

%PUT CHECK AT &SYSDATE;

%PUT CHECK AT &SYSTIME;

%PUT #####################;

DATA _NULL_;  

INFILE "&LOG_PATH" END=LAST;

 RETAIN LINE 0;

 INPUT Key$ @@;

 line+1;  

IF line=1 THEN PUT"================================";  

IF Key in("ERROR:","ERROR","WARNING:") THEN DO;   

INPUT desc & $100.;   

PUT Key=desc;   

OUTPUT;  END;  

ELSE IF Key ="CHECK" THEN DO;   

INPUT desc & $10.;  

 PUT "Above was check" desc "----------------------";   

PUT;  END;  

ELSE INPUT Key $; RUN;

%MEND;

%MACRO CHECK_LOG(INPUT_TABLE,LOG_PATH)/STORE;

DATA _NULL_;  

SET &INPUT_TABLE NOBS=NOBS;  

CALL SYMPUTX(‘NUM‘,NOBS);  

STOP; RUN;

%DO I=1 %TO #  

DATA _NULL_;  SET &INPUT_TABLE;  

IF ID=&I;  

CALL SYMPUTX(‘LOG_NAME‘,NAME);  

STOP;

RUN; 

%PUT #####################; 

%PUT CHECK &LOG_NAME;  

%CHECK_LOG0(1,&LOG_PATH.\&LOG_NAME.);

%END;

%MEND;

/*调用宏*/

OPTIONS PS=MAX LS=MAX NOCENTER SASMSTORE=SASUSER MSTORED MAUTOSOURCE;

LIBNAME S ‘.\DATA‘;

%GET_NAME(.\DATA,log,S.DIR); /*参数1:log文件所在位置 参数2:读取文件类型 参数3:log文件名存储的数据集名称*/

%CHECK_LOG(S.DIR,.\DATA); /*参数1:log文件名存储的数据集名称 参数2:log文件所在位置*/

SAS:多个LOG的批量查询