function libname(dsn) { i = index(dsn, "."); if (i > 0) { tmp = substr(dsn, 1, i - 1); } else { tmp = "WORK"; } return toupper(tmp); } function memname(dsn) { i = index(dsn, "."); if (i > 0) { tmp = substr(dsn, i + 1, length(dsn)); } else { tmp = dsn; } return toupper(tmp); } function ilog(path, dsn) { printf("R,%s,%s,%d,%s,%d\n", path, dsn, FNR, FILENAME, NR); return 1; } function olog(path, dsn) { printf("W,%s,%s,%d,%s,%d\n", path, dsn, FNR, FILENAME, NR); return 1; } /NOTE: ライブラリ参照名/ && /を次のように割り当てました。/ { libref = $3; getline; while ($1 != "物理名") { getline; } lib[libref] = $3; } $1 ~ /NOTE:/ && $2 ~ /データセット/ && $NF ~ /オブザベーションを読み込みました。/ { dsn = $3; libref = libname(dsn); mem = memname(dsn); if (libref != "WORK" && libref != "SASHELP") { dir = lib[libref]; if (dir != "") { tmp = sprintf("%s/%s.sas7bdat", dir, tolower(mem)); status = ilog(tmp, dsn); } else { printf("ERROR %s\n", dsn); exit; } } } $1 ~ /NOTE:/ && $2 ~ /データセット/ && $NF ~ /変数です。/ { dsn = $3; libref = libname(dsn); mem = memname(dsn); if (libref != "WORK" && libref != "SASHELP") { dir = lib[libref]; if (dir != "") { tmp = sprintf("%s/%s.sas7bdat", dir, tolower(mem)); status = olog(tmp, dsn); } else { printf("ERROR %s\n", dsn); exit; } } } $1 ~ /MPRINT\([A-Z0-9_]+\):/ && $2 ~ /^set$/ { match($3, /([a-zA-Z0-9_]+\.)?[a-zA-Z0-9_]+/); if (RLENGTH > 0) { dsn = substr($3, RSTART, RLENGTH); libref = libname(dsn); mem = memname(dsn); if (libref != "WORK" && libref != "SASHELP") { dir = lib[libref]; if (dir != "") { tmp = sprintf("%s/%s.sas7bdat", dir, tolower(mem)); status = ilog(tmp, dsn); } else { printf("ERROR %s\n", dsn); exit; } } } } END { print "_EOF_"; }
SASプログラムとログを解析するユーティリティを開発するための備忘録です。This is a memo to develop utility that analyzes the SAS log.
2013年8月15日木曜日
データセットのI/Oを補足するコード(私家版#2)
これ自分用のコードです。
登録:
コメントの投稿
(
Atom
)
0 件のコメント :
コメントを投稿