Я использую SAS 9.2 в OpenVMS для подключения к внешнему источнику данных через сокет, указанный в операторе имени файла:
filename extsrc SOCKET "extserver:port" recfm=v;
data foo;
infile extsrc;
input;
.... some statements to read stuff ...;
run;
Это работает (как и должно быть) в 99% случаев. Однако время от времени программа, которая должна прослушивать удаленный порт, не является. В настоящее время это приводит к выходу программы с ошибкой:
Error: Connection refused.
После чего мы пробуем снова, и это обычно работает. Тем не менее, это становится утомительным, поэтому я хотел бы обнаружить эту ошибку в программе и устранить ее там. Кто-нибудь знает способ обнаружения этого типа ошибки в SAS?
Я попытался проверить действительность fileref extsrc с помощью функции fileref (), но он просто возвращает -20005, что означает, что fileref назначен, но не указывает на локальный файл (что верно). Ошибка становится очевидной, только когда я использую fileref в шаге данных, поэтому я хотел бы сделать что-то вроде:
data _null_;
rc=infile extsrc;
if rc=0 then do;
//whatever I want to do;
end;
else do;
//throw some error and try again later;
end;
run;
[update1]
Я пытаюсь сделать предложения, приведенные ниже, но в истинном ключе проблема не возникла в течение последних нескольких дней, поэтому я не уверен, какое окончательное решение еще есть.
[/ Update1]
[Update2]
Ошибка, наконец, снова возникла. Согласно ответу cmjohns, значение syserr равно 1012 после возникновения этой ошибки. Теперь я посмотрю значение syserr и попробую снова фиксированное количество раз, если оно не получится.
[/ Update2]
[Update3]
У меня уже несколько дней работает код, который работает. Дополнительная проблема заключалась в том, что (разумеется), если &syserr
получает значение больше 6, возникает условие ошибки, поэтому в зависимости от установки errorabend/noerrorabend
это приводит к полному завершению программы или к ее продолжению obs=0
в режиме синтаксчек. Оба нежелательны. Решение состоит в том, чтобы установить options noerrorabend nosyntaxcheck
до шага данных, который вызывает эту ошибку. Кроме того, если возникает ошибка, я должен очистить имя файла extsrc и переназначить его. Наконец, когда этот фрагмент кода завершен, я восстанавливаю errorabend. Если я восстановлю nosyntaxcheck, это заставит SAS обнаружить предыдущее состояние ошибки и переключиться в режим синтаксической проверки в этой точке, что также нежелательно.
[/ Update3] * * тысяча двадцать-две