楼主: tempcsssss
2756 0

Log的整理 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

60%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
23 点
帖子
2
精华
0
在线时间
1 小时
注册时间
2013-8-19
最后登录
2015-10-13

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我们在实际工作中处理数据时,往往有好多中间步骤,当测试程序时,要分析整个过程是否正确,但不能光看能不能出结果。因之前的测试可能产生了数据,而又没有删除这些中间过程的临时表,那么以后测试的时候还保留这原来的数据。修改后的数据步是错误的,那么就不会修改旧的数据集,那么总会给我门一个假象,好像一切都正常。
了确证这一切,我们需要查看日志LOG,但是这个对眼睛的考验好大啊,特别程序比较庞大时。那么有没有什么好的办法呢?自己动手呗!
写了两个宏,一个清除日志%logclean,虽然本身也没几条语句,但是现在比较懒,能省就省呗,主要把这个加在整个程序的开头,用于清除原来的log。还有一个就是主要的了,把最新的log到指定文件,然后用data步读取这个文件,对记录做分析,把错误ERROR与警告WARNING信息收集起来,然后在put到log上,就ok了哦。
测试一下吧,用logcheck()不带参数的话会自动清掉刚刚生成的log,看起来就干净点。参数1的话会保留log。%macro logclean;
DM 'log; "clear";';
run;
quit;
%mend;
%macro logcheck(p);
*日志错误信息检查,
注:在不跟参数的时候,将清除日志;
加参数1,怎保留日志;
DM 'LOG; log; FILE "y:\temp\check.log" replace;';  
*注意修改日志保的位置,并且同时修改下面data步的infile语句;
run;
%if &p=1 %then;
%else %do;
DM 'log; "clear";';
run;
quit;
%end;
%put CHECK at &systime  ####################################################################;
*data logcheck;
data _null_;
infile "y:\temp\check.log" 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;
输出结果举例:
2820  %logcheck(1)
CHECK at 10:17  ####################################################################
NOTE: Infile "y:\temp\check.log" 是:
      文件名=y:\temp\check.log,
      RECFM=V,LRECL=256
==================================================================================
Key=ERROR: 编号的变量列表中 (s1-d) 数字后缀缺失。
Key=ERROR: 数组 s 指定的维定义的变量过少。
Key=ERROR 400-185: SUM 语句要求数值表达式。
Key=WARNING: 没有找到列表 s1-s10000 中的所有变量。
Key=WARNING: 数据集 WORK.B 可能不完整。该步停止时,共有 0 个观测和 0 个变量。
Key=WARNING: 数据集 WORK.B 由于该步已停止,而没有被替换。
NOTE: 从 Infile "y:\temp\check.log" 中读取了 265 条记录。
       最小记录长度是 0。
       最大记录长度是 110。
NOTE: INPUT 语句到达一行的末尾,SAS 已转到新的一行。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间         0.01 秒
      CPU 时间         0.01 秒

二维码

扫码加我 拉你入群

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

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

关键词:Log warning replace infile output ERROR 程序 记录 信息 眼睛

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-23 19:21