Est-il un moyen de faire des SAS d'arrêt sur le premier avertissement ou une erreur?
SAS aime à poursuivre le traitement bien après les avertissements et les erreurs, j'ai souvent besoin de revenir sur les pages dans le journal pour trouver un problème. Est-il un meilleur moyen? J'aimerais qu'il s'arrêter dès la première erreur ou d'avertissement s'affiche afin que je puisse corriger et essayer de nouveau.
Je vois que SI les champs des questions au sujet de la programmation SAS: la migration.
OriginalL'auteur Two Bit Gangster | 2012-01-25
Vous devez vous connecter pour publier un commentaire.
Les ERREURS=1 option a déjà été proposé, mais qui ne cesse il de messages d'ERREUR d'écriture dans le journal. Je voudrais suggérer une autre option de système de ERRORABEND qui arrête le programme de la poursuite du traitement pour la plupart des erreurs. Je ne sais pas d'une option pour terminer le traitement en raison des avertissements, mais je pense que vous pourriez ajouter une macro comme suit pour arrêter le traitement.
Vous pourriez répéter l'appel de macro après chaque étape de votre programme, et il doit se terminer au point que le code d'erreur est rien mais 0.
Est-il quelque chose comme la ERRORABEND option qui ne causent pas de déconnexion de la SAS serveur? J'utilise par exemple connecté à un serveur unix et tandis qu'il serait bon d'arrêter le traitement à la première erreur, ERRORABEND ferme la connexion au serveur qui prend un certain temps pour rétablir sur la prochaine course.
Vous pouvez aussi vérifier si
&syserrortext
est non-vide. Je trouve que cette variable est définie de façon plus fiable que&syserr
.OriginalL'auteur RWill
J'ai été en utilisant le
%runquit
macro récemment. Fonctionne bien pour les deux lots d'emplois et de séances interactives (ne fermez pas votre session, juste arrête l'exécution du code).Source: http://www.cpc.unc.edu/research/tools/data_analysis/sas_to_stata/sas-macros/runquit.html
Pour l'utiliser, vous fondamentalement de type
%runquit;
à la fin de toutes les données de l'étape ou de PROC au lieu de taper votrerun
ouquit
déclaration.Code:
Datastep utilisation:
PROC utilisation:
Ce n'est pas tout à fait comme à peu lors de la lecture à l'aide de code, mais elle permet de faire du débogage d'un beaucoup plus facile.
Running.... running....
et ne se termine jamais à retourner un résultat/erreur dans le journal. Il arrête le programme de transport par barge sur et de réécriture/création d'autres ensembles de données, de sorte qu'il répond à l'objectif principal, je suppose.Nous sommes une migration vers un environnement où je vais pouvoir tester cela avec par exemple. Sera mise à jour une fois que j'ai eu l'occasion de tester.
OriginalL'auteur Robert Penridge
Une option est de les remplacer
run
avecrun &g_cancel
partout, etproc sql;
avecproc sql &g_noexec;
. Initialement&g_cancel
et&g_noexec
sont rien si tout fonctionne.Sur la frappe d'une erreur (soit
%sys_rc
,%sql_rc
ou à l'aide en se référant à la logique métier) ensemble&g_cancel
pour annuler et&g_noexec
à noexec.Cela doit cesser toutes les étapes ultérieures de l'exécution - de toute évidence, les variables macro peut être omis pour les étapes à exécuter, indépendamment (par exemple, un ranger) ou vérifié avant d'effectuer les étapes purement macro.
Note pour Enterprise Guide les utilisateurs: La seule note d'avertissement, c'est que si vous exécutez plusieurs code éléments dans la même session, vous aurez besoin de réinitialiser les termes d'erreur au début de chaque élément du code, de peur sans rapport avec les erreurs d'arrêter tout ce travail.
OriginalL'auteur syntheticbrain
J'ai souvent faire quelque chose de similaire à RWill, mais j'enveloppe mon programme en entier dans une macro. Après chaque étape, PROC SQL, PROC TRI, etc. - Je vérifier un code d'erreur (&SYSERR ou &SQLRC). Si elle est non nulle, je saute à la fin.
Plus de détails et le code ici: https://heuristically.wordpress.com/2012/02/09/return-codes-errors-sas/
Je ne peux pas utiliser RWill de endsas en raison de la façon dont notre organisation du système de batch s'exécute indépendamment des programmes dans un SAS session.
Si vous ne vous souciez pas de la manipulation de l'erreur dans la PROC SQL, alors ne pas vérifier le code d'erreur. Un cas où, je pense, cela peut être utile, c'est à l'aide de
drop table foo;
et vous ne vous souciez pas de savoir si la table existe.Génial, merci encore.
OriginalL'auteur Andrew
En tant que complément aux Rwill réponse:
Si vous êtes en utilisant un processus stocké (STP), il est également agréable de ne pas afficher le journal de vos utilisateurs lorsqu'une erreur se produit et de supprimer le "Show SAS journal" bouton.
Qui peut être réalisé avec ce
source : http://support.sas.com/kb/16/225.html
Et ici est une version améliorée que j'ai fait pour toujours la même erreur au format json.
et version HTML :
%abort
ouendsas;
là, donc le reste du programme ne s'exécute pas inutilement?Ne serait-ce pas exiger de
%checkErrors
très souvent dans votre programme? Je suis simplement en plaçant%checkErrors
à la fin de la STP, donc je ne suis pas sûr qu'il serait utile d'abandonner plus. Qu'en pensez-vous?corriger, si à la fin du programme, alors pas besoin de l'annuler. Je suis juste de penser en termes de certains de mes propres cas d'utilisation (en cours d'exécution longue STPs) où il serait pratique de pouvoir interrompre au milieu d'un programme sans l'envoi d'erreurs pour le client.
découvert aujourd'hui - le
syscc=0
partie est très nécessaire!OriginalL'auteur stallingOne