WRDS远程连接下SAS日志满致代码暂停的解决方法咨询
解决WRDS远程SAS会话中日志满导致代码中断的问题
我明白你的痛点——本地SAS里用dm命令清理日志很顺手,但到了WRDS远程环境就失效,日志堆满后没人手动清理直接导致代码中断,太耽误事了。核心原因是dm是本地SAS图形界面的命令,在rsubmit的远程会话里根本不生效(WRDS服务器端没有SAS窗口)。下面给你几个实用的解决方案,按优先级排序:
1. 从源头减少日志输出(最推荐)
先通过SAS选项砍掉不必要的日志内容,从根本上避免日志过快堆满:
- 在
rsubmit开头添加这些选项:options mprint nocenter nosource nonotes; options logsize=100m replace;mprint nocenter nosource nonotes:关闭宏代码打印、居中格式、源代码输出和注释类提示,这些都是日志膨胀的重灾区logsize=100m replace:设置单日志文件最大100MB,超过后自动覆盖旧日志(你可以根据需求调整大小,比如500m)
2. 远程会话中定向/清空日志
如果完全不需要保留日志,或者需要定时清空,可以用proc printto把日志重定向到“黑洞”设备,彻底避免日志堆积:
- 在
rsubmit开头执行:
这样所有日志都会被丢弃,不会写入任何文件。如果中途需要恢复日志输出,再执行:proc printto log='/dev/null' new; run;
你也可以在宏循环里定时执行这个操作,比如每循环N次就清空一次日志。proc printto log=log; run;
3. 优化你的宏代码减少冗余输出
除了全局选项,还要检查循环内的代码:
- 去掉不必要的
put语句(如果有的话),这些会大量增加日志内容 - 确保
options errors=2;放在rsubmit开头,提前设置错误阈值,避免小错误导致无意义的日志输出 - 如果循环内有重复的PROC步,尽量合并或简化,减少重复日志
4. 用WRDS后台作业运行代码
如果你的代码运行时间很长,建议用WRDS的后台提交功能,这样即使本地断开连接,代码也会在服务器上继续运行:
- 把
rsubmit改成rsubmit wait=no;,提交后台作业 - 或者直接通过WRDS网页界面上传SAS代码提交,日志会保存在服务器上,你之后可以随时查看,不会因为本地连接中断而停止
修改后的代码示例
结合上面的方案,你的代码可以调整成这样:
options ls = 78 ps = 66; ********************connect to WRDs;***************************************; %let wrds = wrds.utexas.edu 4016;options comamid = TCP remote=WRDS; signon username=_prompt_; *************************************************************************; rsubmit; /* 配置日志选项,减少输出并限制大小 */ options ls=78 ps=66 mprint nocenter nosource nonotes logsize=100m replace; options errors=2; libname qa"F:\research2\transcripts"; libname cq '/wrds/nyse/sasdata/taqms/cq'; proc upload data=qa.daylist out=daylist; run; data daylist;set daylist;traday2 = input(put(traday,yymmddn8.),8.);drop traday;rename traday2=traday;run; data intraday;run; %macro temp; %do i = 1 %to 2215; /* 你的循环代码内容 */ /* 可选:每循环一次清空日志(如果需要) */ proc printto log='/dev/null' new; run; proc printto log=log; run; %end; %mend; %Temp; endrsubmit;
注意:如果用/dev/null丢弃日志,一定要确保代码逻辑稳定,或者保留必要的错误监控(比如options errors=2;),避免出问题了完全没有日志排查。
内容的提问来源于stack exchange,提问作者Angel Chen
相关产品推荐
相关产品推荐

