我正在使用runSASJob在UNIX環境中執行SAS程序。SAS命令行 - 部分程序執行
我想知道是否有辦法從命令行執行一部分SAS程序。
例如,假設我有一個100行的SAS程序,並且該程序中有一個數據步驟,佔用5-10行。
只能從命令行運行第5-10行嗎?
感謝
我正在使用runSASJob在UNIX環境中執行SAS程序。SAS命令行 - 部分程序執行
我想知道是否有辦法從命令行執行一部分SAS程序。
例如,假設我有一個100行的SAS程序,並且該程序中有一個數據步驟,佔用5-10行。
只能從命令行運行第5-10行嗎?
感謝
下面的宏應該解決這個問題,一些類似的:
%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
作品(至少)在Unix和Windows%
在-set RUNMACRO %foo
有多個可用的選項給你:
option spool
,並且您知道日誌中所需的5行所佔的行號,您可以通過%include
語句重播這些行。選項3,樣本數據的步驟可能是這樣的:
%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";
如果你感覺勇敢,你真的不希望創建一個額外的臨時文件,可以在通話執行要做到這一點,而不是:
data _null_;
infile "/path/to/100/line/file.sas" obs = 10 firstobs=5 lrecl = 32767;
input;
call execute(_infile_);
run;