Насколько я знаю, это невозможно достичь напрямую. Вы можете эмулировать это, передавая уникальное имя файла в sas с помощью параметра командной строки -sysparm и сохраняя в нем свой вывод STDOUT. Затем можно использовать параметр командной строки -log, чтобы отправить журнал sas в другой файл. После завершения программы SAS вы сможете использовать выбранную вами программу для анализа каждого из созданных файлов. К сожалению, файл журнала блокируется до тех пор, пока программа sas не завершит его, поэтому, если вы хотите использовать SAS для обработки файла журнала, вам потребуется запустить вторичную последующую программу для этого. (т.е. вы не можете прочитать файл журнала из программы SAS, которая его создает).
Как только вы прочитаете журнал, вы можете найти строки, начинающиеся с ОШИБКА: или ПРЕДУПРЕЖДЕНИЕ: и предпринять соответствующие действия (в моем случае он отправляет мне электронное письмо). Вы можете добавить логику, которая соответствует вашему стилю кодирования. Например, некоторые вещи, которые SAS рассматривает как ЗАМЕЧАНИЯ, я считаю ОШИБКАМИ. Кроме того, некоторые вещи, которые SAS рассматривает как ОШИБКИ, меня не волнуют. Вот логика, которую я использую:
data problems log;
length line $1000;
infile "&logfile";
input;
logfile = "&logfile";
line_no = _n_;
line = _infile_;
problem = 0;
if
(
line =: "ERROR:"
or line =: "WARNING:"
or line =: "NOTE: Numeric values have been converted to character values"
or line =: "NOTE: Character values have been converted to numeric values"
or line =: "NOTE: Missing values were generated as a result of performing an operation on missing values"
or line =: "NOTE: MERGE statement has more than one data set with repeats of BY values"
or line =: "NOTE: Invalid (or missing) arguments to the INTNX function have caused the function to return"
or line =: "INFO: Character variables have defaulted to a length of 200"
or line =: "NOTE: Invalid"
)
and not
(
line =: "WARNING: Your system is scheduled to expire"
or line =: "WARNING: The Base Product product with which Session Manager is associated"
or line =: "WARNING: will be expiring soon, and is currently in warning mode to indicate"
or line =: "WARNING: this upcoming expiration. Please run PROC SETINIT to obtain more"
or line =: "WARNING: information on your warning period."
or line =: "WARNING: This CREATE TABLE statement recursively references the target table. A consequence"
or line =: "WARNING: Unable to copy SASUSER registry to WORK registry. Because of this, you will not see registry customizations during this"
or line =: "WARNING: Estimates did not improve after a ridge was encountered in the objective function."
or line =: "WARNING: Estimates may not have converged."
or line =: "ERROR: A lock is not available for"
or line =: "ERROR: Errors printed on pages"
)
then do;
problem = 1;
output problems;
end;
output log;
run;
Надеюсь, это поможет.