|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||||
|
Membre éclairé
![]() statisticien Inscription : mai 2011 Messages : 213 ![]() |
Bonsoir,
J'ai un programme de retraitement de chaines de caractères qui pour certaines observations va immanquablement créer des erreurs. J'aimerais dans ce cas là que la variable sur laquelle s'est produite l'erreur ai une modalite "***ERREUR***" (pour "se souvenir" du lieu des erreurs voir créer un embranchement pour des traitements ad hoc que je définirais ensuite) pour cette observation, et par ailleurs que les erreurs spécifiques ne soient pas écrites dans la log (je souhaiterais faire une "interception" d'erreur en quelque sorte). Pour être plus explicite voici un exemple : Code :
Code :
Code :
Code :
|
||||||||
|
|
00
|
|
|
#2 | ||
|
Expert Confirmé
![]() ![]() Olivier DecourtFormateur en informatique Inscription : avril 2008 Messages : 1 467 ![]() |
Bonjour Jérôme.
Oui, on peut rattraper à la volée une erreur dans l'étape DATA. Quand il y a un souci, SAS met à jour une variable interne de son vecteur de travail appelée _ERROR_. Par défaut, celle-ci vaut 0. Elle montre des signes d'énervement en prenant n'importe quelle valeur positive (qui dépend de l'erreur évidemment, mais je ne sais pas où se trouve le dictionnaire des valeurs). Bref, tu la reconfigures à la volée car elle n'est pas protégée : Code :
Bonne journée et merci de cette petite piqûre nostalgique. PS : c'est évidemment super dangereux de prendre l'habitude de planquer l'erreur sous le tapis. Il faudrait tester plus finement le code erreur, ou compliquer la condition (REVERSE2 est vide par exemple) pour ne pas enterrer tous les problèmes dans le même trou. |
||
|
|
20
|
|
|
#3 |
|
Membre éclairé
![]() statisticien Inscription : mai 2011 Messages : 213 ![]() |
Merci olivier, je vais tester ça.
|
|
|
00
|
|
|
#4 | ||||
|
Membre éclairé
![]() statisticien Inscription : mai 2011 Messages : 213 ![]() |
Je viens de regarder plus en détails,
malheureusement l'erreur ne disparait pas totalement, car celle dans la fonction s'affiche toujours Code :
Code :
Il s'agit donc de faire également la même interception d'erreur au niveau de la fonction, j'ai bricolé un peu le même code avec if _error_>0 then _error_=0 mais cela ne semble pas fonctionner dans la proc fcmp de la même façon que dans l'étape DATA |
||||
|
|
00
|
|
|
#5 |
|
Expert Confirmé
![]() ![]() Olivier DecourtFormateur en informatique Inscription : avril 2008 Messages : 1 467 ![]() |
Je ne sais pas si on peut facilement manipuler _error_ dans la fonction, car il y a un risque que ça soit une variable locale par défaut.
Il faudrait mettre _error_ en paramètre "update" de la fonction, ou quelque chose de ce genre ; rien de simple en somme. |
|
|
00
|
|
|
#6 |
|
Membre éclairé
![]() statisticien Inscription : mai 2011 Messages : 213 ![]() |
Bonjour Olivier et merci,
parce qu'en fait cette erreur se produit des centaines de milliers de fois et gonfle un ficher .txt où je stocke la log de cette étape. Et SAS prend beaucoup, beaucoup de temps à écrire dans cette log. Je cherche à ce qu'il y a plus aucune impression en log concernant cette étape alors si il n'y a pas moyen faire autrement, car les fichier log.txt de plusieurs Go ça sert à rien et ça ralenti.... Je suis obligé de passer par ceci http://sas.developpez.com/faq/sas/?page=1.3#101 ? Cela permet bien de lancer quelque chose sans rien écrire dans la log ou quelque part d'autre (et donc sans perdre le temps en conséquence...) ? |
|
|
00
|
|
|
#7 |
|
Membre éclairé
![]() statisticien Inscription : mai 2011 Messages : 213 ![]() |
Vu que la solution http://sas.developpez.com/faq/sas/?page=1.3#101 ne semble pas marcher non plus,
Finalement j'ai donc ajouté un test dans la fonction pour limiter sérieusement le cas des données invalides (je n'évalue la fonction que sur les données qui ont une chance d'être réellement modifiées par la fonctions, celles qui ne seront de toute façon modifiées et qui produisent des erreurs en nombre je ne les soumet plus, ça permet par la même occasion une petite optimisation du code) ce qui réduit drastiquement la taille du fichier log.txt à quelques dizaines de Mo limitant ainsi la perte de temps en écriture dans la log. Mais je demeure intéressé par une solution au problème de l'interception/gestion des erreurs dans les fonctions créées via fcmp |
|
|
00
|
|
|
#8 | ||
|
Invité de passage
![]() Inscription : décembre 2008 Messages : 1 ![]() |
As-tu essayé avec le caractère ? devant le format ?
Cela évite l'affichage des erreurs mais continue d'alimenter la variable _error_. Code :
|
||
|
|
10
|
|
|
#9 |
|
Membre éclairé
![]() statisticien Inscription : mai 2011 Messages : 213 ![]() |
Bonjour,
oui j'ai essayé le ? devant comme tu le propose mais les erreurs demeurent |
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() ![]() |
Il manque un espace entre le caractère '?' et le nom du format.
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
|
|
|
00
|
|
|
#11 |
|
Membre éclairé
![]() statisticien Inscription : mai 2011 Messages : 213 ![]() |
J'étais passé à d'autres travaux en attendant, je regarde dans la semaine sur ce point précis.
Merci. |
|
|
00
|
|
|
#12 | ||||
![]() ![]() Samir SELMANEConsultant en Business Intelligence Inscription : février 2011 Messages : 1 012 ![]() |
Je ne crois pas que c'est du à l'espace non laissé entre ?? et l'informat.
Code :
pour n'imprimer que 1 seul MSG d erreur de chaque type d'erreur. Exemple: Code :
j'espère que sa pourra t'aider. |
||||
|
|
00
|
|
|
#13 | ||||
|
Membre éclairé
![]() statisticien Inscription : mai 2011 Messages : 213 ![]() |
oui oui, mais c'est toujours la même histoire, ça limite les erreurs de l'étape data, mais pas celles de la fonction, et c'est celles ci qui me posent problème et que je n'arrive pas à supprimer.
Code :
Code :
En fait le titre est trompeur, ce fil est trop ancien je pense pour en changer le titre, mais "Gestion des erreurs dans la proc fcmp" serait plus indiqué. Enfin à présent c'est juste pour savoir, vu que finalement j'ai préfèré mettre le code en macro %fonc plutot que dans une fonction , ce qui a l'avantage de faire des erreurs dans l'étape DATA...dont on peu limiter le nombre comme vous me l'avez indiqué. |
||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com