日期:2014-05-16  浏览次数:20632 次

SAS 如何在Windows Linux 环境中做成自动化脚本
SAS大部分使用者都是在IDE环境中去运行使用它,通过editor, Log, Output窗口去运行或观测log或观察结果,最近需要能够由程序自动起调,考虑需求首先将它包装成脚本,然后由cron(任务调度)或外部程序起调。本节不讨论cron(任务调度)或外部程序如何起调,如果有需求,可以留言,我会解答。

建议在脚本中核心命令之前要对参数个数,参数内容做一些判断,比如参数是否全有,sas文件是否存在,然后当检查通过后,再执行核心起调命令。Windows和Shell写法会有些区别,但都有相应的命令或处理代码段解决。

起调命令主要是有几部分组成,本文以Windows举例,linux可以进行相应的改写,
"%SAS_HOME%\sas" -sysin %HOME_DIR%\src\%1.sas -log "%HOME_DIR%\log\%1.log.%d%.%2" -print %HOME_DIR%\lst\%1.lst
-sysin if required in your operating environment, names the batch program 就是指向你的sas文件
-log log日志文件 默认log文件是replace模式,如果需要对log进行配置修改,见下面的log配置说明
-print lst结果文件
-work yourtempworkpath

当计算的中间结果非常大的时候,一定要指向一个可用空间较大的目录,否则会报错Error:对“******”的写入失败。文件已满,并可能损坏。

-logparm open=append
open方式有三种
OPEN=APPEND
  appends the SAS log content to the existing SAS log
OPEN=REPLACE
  replaces the existing SAS log
OPEN=REPLACEOLD
  replace the existing SAS log if it is older than 24 hours


写日志有两种方式
通过缓存log内容,log是定期地被提交写入而不是每次写入,这样sas能够更有效率地执行。
-LOGPARM WRITE=IMMEDIATE

WRITE=IMMEDIATE
for the log content to be written as it is produced and set WRITE=BUFFERED
WRITE=BUFFERED

for the log content to be written when the buffer is full.

滚动模式有7种
ROLLOVER=AUTO|NONE|SESSION | n | nG | nM | nG
这个顾名思义吧
-logparm "rollover=auto"
-logparm "rollover=session"
-logparm "rollover=none"
n |nK |nM |nG

代表文件尺寸达到所给数字n|nK|nM|nG时,会生成新的log文件