我正在使用runSASJob在UNIX环境中执行SAS程序。
我想知道是否有办法从命令行执行SAS程序的一部分。
例如,假设我有一个包含100行的SAS程序,该程序中有一个数据步骤占用5-10行。
我是否可以仅从命令行运行第5-10行?
由于
答案 0 :(得分:1)
您可以使用各种选项:
option spool
,并且您知道日志中占用5条所需行的行号,您可以通过{重播这些行{1}}陈述。对于选项3,示例数据步骤可能如下所示:
%include
如果你感到勇敢,并且你真的不想创建一个额外的临时文件,你可以使用call execute代替这样做:
%let SHORTFILE = %sysfunc(pathname(work))/shortfile.sas;
data _null_;
infile "/path/to/100/line/file.sas" obs = 10 firstobs=5 lrecl = 32767;
file "&SHORTFILE" lrecl= 32767;
input;
put _infile_;
run;
%include "&SHORTFILE";
答案 1 :(得分:0)
以下宏应解决此问题以及一些类似问题:
%macro runMacroFromEnv
/des='Set the environment value RUNMACRO to run a macro';
%if %sysfunc( envlen( RUNMACRO ) ) > 0 %then %sysget( RUNMACRO );
%mend;
例如:如果您有以下文件:
%macro foo;
%put I just ran foo;
%mend;
%macro runMacroFromEnv
/des='Set the environment value RUNMACRO to run a macro';
%if %sysfunc( envlen( RUNMACRO ) ) > 0 %then %sysget( RUNMACRO );
%mend;
%runMacroFromEnv;
并使用以下命令调用SAS:
sas runMacro.sas -set RUNMACRO %foo
然后在日志的某个地方,你会看到:
I just ran foo
一些重要的细节:
-set
(至少)%
-set RUNMACRO %foo