J'utilise SAS 9.2 sur OpenVMS pour se connecter à une source de données externe sur une prise spécifiées avec une instruction nom:Gestion des erreurs sur les sockets dans SAS sous OpenVMS
filename extsrc SOCKET "extserver:port" recfm=v;
data foo;
infile extsrc;
input;
.... some statements to read stuff ...;
run;
Cela fonctionne (comme il se doit) 99 % du temps. Cependant, de temps en temps, le programme censé écouter sur le port distant ne l'est pas. Actuellement, cela provoque la sortie du programme avec une erreur:
Error: Connection refused.
Ensuite, nous essayons à nouveau, et cela fonctionne habituellement. Cependant, cela devient fastidieux alors je voudrais détecter cette erreur dans le programme et y faire face. Quelqu'un sait-il un moyen de détecter ce type d'erreur dans SAS?
J'ai essayé de vérifier la validité de fileref extsrc en utilisant la fonction fileref(), mais cela renvoie simplement -20005, ce qui signifie que le fichier fileref est assigné mais ne pointe pas vers un fichier local (ce qui est vrai). L'erreur ne se manifeste que lorsque j'utilise le fileref dans un datastep, donc je voudrais faire quelque chose le long des lignes de:
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] J'essaie les suggestions faites ci-dessous, mais en vrai heisenbug mode le problème n'a pas réussi à surgir au cours des derniers jours, donc je ne suis pas sûr de ce que la solution finale est encore. [/ update1]
[update2] L'erreur a finalement réapparu. Selon la réponse de cmjohns, la valeur de syserr est 1012 après que cette erreur se produit. Je vais maintenant regarder la valeur de syserr, et réessayer un nombre fixe de fois s'il échoue. [/ update2]
[update3] J'ai eu du code en cours d'exécution depuis quelques jours maintenant qui fonctionne. Le problème supplémentaire était (bien sûr) si &syserr
obtient une valeur supérieure à 6 une condition d'erreur est survenue, donc en fonction de votre paramètre cela provoque la fin complète du programme, ou le programme continue avec obs=0
en mode syntaxchek. Les deux sont indésirables. La solution consiste à définir options noerrorabend nosyntaxcheck
avant le flux de données qui génère cette erreur. De plus, si l'erreur se produit, je dois effacer le nom de fichier extsrc et le réaffecter. Enfin, une fois cette partie de code terminée, je restaure errorabend. Si je restaure nosyntaxcheck, cela provoque que SAS détecte la condition d'erreur précédente et passe en mode de vérification syntaxique à ce point, ce qui est également indésirable. [/ update3]
Avez-vous demandé ce dans le forum SAS http://groups.google.com/group /comp.soft-sys.sas/topics –