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=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=&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文件所在位置*/

转载于:https://www.cnblogs.com/Anni-love-Ferris-wheel/p/6848982.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值