SASでログをちぇっくするをいじってみた。

この前のchklog.sasを動かしてみて、私なりに編集してみました。

/* ==============================================================
 Program name:chklog.sas
 Description:SASログファイルを読み込み、Error,warning,
 その他(Missing等)ごとに出力する。
 Autor:Thierry Hennekes
 Revised:masayukrin
 * Mr.Hennekesのプログラムを整形化
 * コメントを邦訳
 * DMステートメントをコメント化
 * Notes日本語対応
 ============================================================= */
%MACRO chklog;
/* 自身のログはnologに出力 */
	PROC PRINTTO log="h:\nolog.log";
	RUN;
/* ディスプレイ上で開いたログを出力 */
/*	dm log 'file "h:\sas.log" replace'; */
/* logファイル読み込み */
	DATA work.saslog (drop=rec);
		/* 読み込むログファイル名。 */
		/* ディスプレイ上で開いたログを読み込む場合は、sas.logにする */
		INFILE "h:\test_err.log" TRUNCOVER;
		length logrij 5.;
		length srt $25.;
		length rec $400.;
		length melding $400.;
		INPUT 
		rec 1-400;
		*Error;
		IF UPCASE(SUBSTR(REC,1,5)) = 'ERROR' THEN DO;
			srt = '1. ERROR';
			melding = rec;
			logrij = _N_;
			OUTPUT; 
		END;
		*Warning;
		ELSE IF UPCASE(SUBSTR(rec,1,7)) = 'WARNING' THEN DO;
			srt = '2. WARNING';
			melding = rec;
			logrij = _N_; 
			OUTPUT;
		END;
		*Other;
		ELSE IF UPCASE(SUBSTR(rec,7,14)) = 'MISSING VALUES' OR 
			INDEX(UPCASE(rec),'UNINITIALIZED') NE 0 OR
			KINDEX(rec,'以下の箇所で欠損値が生成されました。') NE 0 OR
			KINDEX(rec,'初期化されていません。') NE 0 OR
			KINDEX(rec,'変換します。') NE 0 OR
			KINDEX(rec,'変換しました。') NE 0
			THEN DO;
			srt = '3. Other'; 
			melding = rec;
			logrij = _N_;
			OUTPUT;
		END;
	RUN;
	PROC SORT DATA=saslog;
	BY srt logrij;
	RUN;

	title 'Report LOG SCAN';
	*options pagesize=120 linesize=120;
	PROC PRINT DATA=saslog;
	BY srt;
	RUN;

	title 'The Sas System';
	PROC DATASETS LIBRARY=work NOLIST;
	DELETE saslog;
	QUIT;
/* ディスプレイウィンドウに出力 */
	PROC PRINTTO log=log;
	RUN;
%MEND chklog;
/* exec macro */
%chklog;

コメントがオランダ語だったので少し難儀しました。
あともとのプログラムではDMステートメントで、ディスプレイ上のログを一旦保存してから実行する使用になってました。
個人的には、ログを一度手動保存してから、実行したいので、DMステートメント部分をコメントにしました。