如何记录SAS中的当前步骤?
How to log the current step in SAS?
我正在尝试监视长 SAS 脚本的进度。一开始,我使用了类似的东西:
DATA work.dataset1;
SYSECHO "Currently working on: work.dataset1";
/* DO STUFF*/
END;
PROC SORT DATA=work.dataset1 OUT = work.work.dataset2;
SYSECHO "Currently working on: work.dataset2";
/* DO STUFF*/
END;
.....
DATA work.datasetn;
SYSECHO "Currently working on: work.datasetn";
/* DO STUFF*/
END;
然而,这很难维护并且非常冗长。因此,我尝试创建一个宏,它会自动获取步骤名称或步骤数据集(或让我知道当前是哪个步骤的任何信息 运行)并将其传递给 SYSECHO
:
%macro nstep;
SYSECHO "Finished Processing &SYSLAST";
%mend;
DATA work.dataset1;
%nstep;
/* DO STUFF*/
END;
但是,这实际上打印的是最后一个受影响的数据集,而不是当前数据集。因此,该行为在执行第一步时特别有问题,第一次使用 %nstep
显示上一次执行的数据集的名称。
我正在寻找一种方法来查找当前数据/proc 语句名称,或任何独特的人类可读信息。
SAS 中没有针对监督级源代码处理、步骤语句收集时间(预编译)或步骤编译时间的显式内省或回调机制。
但是,您可以实施和利用(采用)执行所需操作的名称指定框架。
概念:
- 创建一个宏,
E
,接受 name报道。
- 使用
SYSECHO
通过 DOSUBL
关于 name 的消息
- 发出 name 作为源代码
- 当您想将名称消息发送回 IOM 客户端时,请使用
%E(<name>)
(在实际源代码的上下文中)
代码中的框架:
%* part of autoexec, autocall, or specified macro library;
%macro E(name);
&name
%local rc;
%let rc = %sysfunc(DOSUBL(%nrstr(
%put NOTE: SYSECHOing &name; /* The put NOTE: can be removed if you want */
SYSECHO "Working on &name";
)));
%mend;
DATA %E(work.dataset1);
/* DO STUFF*/
RUN;
PROC SORT DATA=work.dataset1 OUT = %E(work.dataset2);
/* DO STUFF*/
RUN;
…
DATA %E(work.dataset27);
/* DO STUFF*/
END;
不是自动的,但也不那么冗长。
我正在尝试监视长 SAS 脚本的进度。一开始,我使用了类似的东西:
DATA work.dataset1;
SYSECHO "Currently working on: work.dataset1";
/* DO STUFF*/
END;
PROC SORT DATA=work.dataset1 OUT = work.work.dataset2;
SYSECHO "Currently working on: work.dataset2";
/* DO STUFF*/
END;
.....
DATA work.datasetn;
SYSECHO "Currently working on: work.datasetn";
/* DO STUFF*/
END;
然而,这很难维护并且非常冗长。因此,我尝试创建一个宏,它会自动获取步骤名称或步骤数据集(或让我知道当前是哪个步骤的任何信息 运行)并将其传递给 SYSECHO
:
%macro nstep;
SYSECHO "Finished Processing &SYSLAST";
%mend;
DATA work.dataset1;
%nstep;
/* DO STUFF*/
END;
但是,这实际上打印的是最后一个受影响的数据集,而不是当前数据集。因此,该行为在执行第一步时特别有问题,第一次使用 %nstep
显示上一次执行的数据集的名称。
我正在寻找一种方法来查找当前数据/proc 语句名称,或任何独特的人类可读信息。
SAS 中没有针对监督级源代码处理、步骤语句收集时间(预编译)或步骤编译时间的显式内省或回调机制。
但是,您可以实施和利用(采用)执行所需操作的名称指定框架。
概念:
- 创建一个宏,
E
,接受 name报道。 - 使用
SYSECHO
通过DOSUBL
关于 name 的消息
- 发出 name 作为源代码
- 当您想将名称消息发送回 IOM 客户端时,请使用
%E(<name>)
(在实际源代码的上下文中)
代码中的框架:
%* part of autoexec, autocall, or specified macro library;
%macro E(name);
&name
%local rc;
%let rc = %sysfunc(DOSUBL(%nrstr(
%put NOTE: SYSECHOing &name; /* The put NOTE: can be removed if you want */
SYSECHO "Working on &name";
)));
%mend;
DATA %E(work.dataset1);
/* DO STUFF*/
RUN;
PROC SORT DATA=work.dataset1 OUT = %E(work.dataset2);
/* DO STUFF*/
RUN;
…
DATA %E(work.dataset27);
/* DO STUFF*/
END;
不是自动的,但也不那么冗长。