|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre habitué
![]() Julien Ingénieur d'études / Biostatisticien Inscription : décembre 2009 Messages : 304 ![]() |
Bonjour, ne sachant pas ou poster mon problème je le met dans cette section du forum par défaut.
J'ai parfois le souci suivant quand je lance ma macro: ERROR: Argument 1 to the function PRXPOSN must be a positive integer returned by PRXPARSE for a valid pattern. Alors quand je lance pour la première fois ma macro (par rapport au fait de lancer SAS) je n'ai pas ce souci, et parfois quand je la relance (sur la même session SAS déjà lancée) et bien ça arrive... En espérant que d'un coup ça n'intervienne pas à chaque lancé (ça je le vivrais franchement mal lol), j'aurais voulu savoir si quelqu'un sait d'où ça peut venir? En vous remerciant d'avance. |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Biostatisticien Inscription : juin 2009 Messages : 1 143 ![]() |
Elle dit qqc de spécial ta log?
Donne nous tes données et ce à quoi tu veux parvenir Manoutz |
|
|
00
|
|
|
#3 |
|
Membre habitué
![]() Julien Ingénieur d'études / Biostatisticien Inscription : décembre 2009 Messages : 304 ![]() |
Concernant les données il s'agit juste d'une table à valeur continue avec une variable réponse dichotomique.
Aprés j'applique une longue macro dessus, mais comme dit ça ne plante pas la première fois que je la lance, c'est la seconde fois si je la relance et encore pas tout le temps. Le but pour moi serait d'analyser le problème pour ne pas l'empirer en rajoutant du contenu à ma macro en fait. Je vais relancer pour voir plus en détail ma log et vous fournir plus d'information sur mon problème. |
|
|
00
|
|
|
#4 |
|
Membre habitué
![]() Julien Ingénieur d'études / Biostatisticien Inscription : décembre 2009 Messages : 304 ![]() |
Bon c'est désespérant... ça refuse de me le refaire lol... néanmoins j'ai droit à un 'out of memory' de temps en temps juste en la relançant alors que je fais rien de plus que les autres fois où je l'ai lancé...
Ma question serait plus judicieuse posée autrement je pense: A ceux qui ont l'habitude de faire de grosse macro (+2000 lignes avec appel à d'autres macro et boucle %FOR un peu dans tous les sens), savez-vous ce qui pourrait provoquer l'un de ses deux types de messages d'erreurs? je m'attends pas à une explication précise lol, mais peut-être des erreurs de débutant ou des choses que je n'aurais pas l'habitude de surveiller et qu'il faudrait? Merci d'avance et désolé pour ma question si vague... |
|
|
00
|
|
|
#5 |
![]() ![]() Samir SELMANEConsultant en Business Intelligence Inscription : février 2011 Messages : 1 006 ![]() |
Bonjour;
est ce que tu peux poster ton programme et/ou ta log, si tu veux bien sûre qu'on essaie de te donner des réponses précises.
|
|
|
00
|
|
|
#6 |
|
Membre habitué
![]() Julien Ingénieur d'études / Biostatisticien Inscription : décembre 2009 Messages : 304 ![]() |
Ca serait volontier, mais le programme fait presque 2174 lignes, j'ai peur que ça vous avance pas du tout...
|
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Biostatisticien Inscription : juin 2009 Messages : 1 143 ![]() |
vu que tu fais des boucles et tu rencontre parfois des problèmes de mémoire, la première que je regarderais c'est s'il n'y a pas possibilité d'optimiser le programme. Par exemple il y a peut être possibilité de sortir de tes boucles des opérations couteuses en mémoire. Mais c'est qu'un exemple. Bref, revoir l'ago...
au fait c'est quoi le %for? |
|
|
00
|
|
|
#8 |
|
Membre habitué
![]() Julien Ingénieur d'études / Biostatisticien Inscription : décembre 2009 Messages : 304 ![]() |
Autant pour moi... je voulais dire %DO...
Je me demandais si ça venait pas d'un excés de création de liste, en fait à la fin de mon programme je fais un DATASET pour détruire toutes les tables inutiles et il y en a un paquet, mais les listes construites avec mes proc SQL restent peut-être en mémoire et ça le derrange lors d'un second traitement, maintenant je dois avouer qu'il y en a pas non plus des masses... Aprés j'ai l'impression que ça vient uniquement quand je relance ma macro sur un même jeux de données, puisque récemment je l'ai lancé sur 8 tables différentes sur la même session et j'ai eu aucun souci... |
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() Biostatisticien Inscription : juin 2009 Messages : 1 143 ![]() |
... on dérive de ton problème initial lié au expressions régulières vers des problèmes de mémoire.C'est toujours le même contexte?
D'une manière générale, supprime une table dès que tu n'en as plus besoin. pour les macros variables (même si je suis un peu perplexe..) tu peux savoir les macros variables que tu as créé en faisant un la fonction symdel supprime les macros variables globales. sinon http://www.codecraftersinc.com/pdf/R...oVariables.pdf dernière chose, parfois relancer (proprement) sas voire ton OS fait pas mal de ménage. |
|
|
00
|
|
|
#10 |
|
Membre habitué
![]() Julien Ingénieur d'études / Biostatisticien Inscription : décembre 2009 Messages : 304 ![]() |
Pour les 2 problèmes que j'ai évoqué (out of memory et PRXPOSN ect ect) ça intervient de temps en temps à tour de rôle sur la même manip.
"dernière chose, parfois relancer (proprement) sas voire ton OS fait pas mal de ménage. " Et bien je me demande également si ça n'aurait pas un lien avec ma log, malgré que je clique sur 'oui' quand SAS me demande de supprimer les anciens résultats, il se peut que ça vienne de là... mais encore une fois j'ai du mal à identifié voir trouver logique le problème étant donné que ça me le fait pas souvent et quand ça me le fait je n'ai touché à rien... Bref assez étrange... Merci pour la syntaxe! |
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() ![]() |
Bonjour,
Le fait que ton programme plante de temps à autre implique qu'il y a un problème de programmation ou de données manipulées lors de l'exécution. Si le problème survient toujours au même endroit dans le code, je te conseille d'afficher le contenu de toutes tes variables (macro) et table juste avant. Cordialement
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
|
|
|
00
|
|
|
#12 |
|
Membre du Club
![]() Fabien Inscription : novembre 2008 Messages : 59 ![]() |
Salut à tous,
Utilises tu des macro variables dans la fonction : PRXPOSN. Si oui, fait un %put de la macrovariable avant l appel de cette fonction pour etre sur quelle n'a pas été modifiée dans la suite de ton programme. Suistrop |
|
|
00
|
|
|
#13 |
|
Membre habitué
![]() Julien Ingénieur d'études / Biostatisticien Inscription : décembre 2009 Messages : 304 ![]() |
Non mais en fait cette fonction je m'en sers même pas lol, c'est lorsque je fais plusieurs régression logistique (proc logistic) en chaîne que mon problème arrive... parfois... et me sors le message que j'ai mis en début de topic.
C'est ça qui me surprend le plus, je peux la lancer 5 fois d'affilé sans souci et d'un coup, sans faire rien de plus qu'avant, il me sort l'erreur lol. |
|
|
00
|
|
|
#14 |
|
Membre habitué
![]() Julien Ingénieur d'études / Biostatisticien Inscription : décembre 2009 Messages : 304 ![]() |
Bon j'ai peut-être une idée pour résoudre tous mes problèmes de fonction sortie de nulle part qui bug et de problème de mémoire mais je cherche depuis ce matin sur internet et je trouve pas vraiment la solution.
En fait ce qui me flingue ma grosse macro c'est qu'en fin de lancé SAS semble vouloir regrouper tous les résultats qu'il a calculé et me les imprimer d'un coup dans la fenêtre rapport (message comme quoi les informations à ajouter au rapport pèse un max d'octet). Or moi je m'en fiche un peu de cette fenêtre étant donné que tous mes résultats je les sors édité avec des proc REPORT au fur et à mesure que ma macro avance. D'où mes deux questions: - Peut-on supprimer les impressions dans la fenêtre rapport en fin de macro? (j'ai déjà essayé dm log 'clear' mais ça ne fait rien... ou plutot ça doit effacer le contenu de ce qui s'affiche en fenêtre log) - Si on supprime ces impressions, est-ce que SAS se décharge de la mémoire dont il a besoin pour les imprimer ou les imprime t'il quand même sans les afficher? En vous remerciant d'avance, surtout que ce problème devient réellement préoccupant au fur et à mesure que j'augmente le nombre de variables à traiter... |
|
|
00
|
|
|
#15 |
|
Membre Expert
![]() ![]() |
Bonjour,
Il faut mettre des noprint dans les procédures qui affichent des résultats que tu ne souhaites pas garder. dm log 'clear' => c'est pour vider la log SAS. DM "Output; Clear; => C'est vider le'output SAS Je ne sais comment va réagir cette fonction SAS/GUIDE Cordialement
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
|
|
|
10
|
|
|
#16 |
|
Membre habitué
![]() Julien Ingénieur d'études / Biostatisticien Inscription : décembre 2009 Messages : 304 ![]() |
"Il faut mettre des noprint dans les procédures qui affichent des résultats que tu ne souhaites pas garder."
C'est bien là le souci de mon programme... j'ai du jongler entre les sorties output que je voulais conserver et celle que je voulais pas sachant que l'ODS EXCLUDE ALL et le NOPRINT ont la facheuse tendance à se répercuter dans le reste du programme ou empêche d'imprimer uniquement ce que je souhaite... Je vais regarder la syntaxe avec 'output' en espérant que ça soit ma solution car ça devient problématique... |
|
|
00
|
|
|
#17 |
|
Expert Confirmé
![]() ![]() Olivier DecourtFormateur en informatique Inscription : avril 2008 Messages : 1 467 ![]() |
+1 Salah : les instructions DM ne concernent que le SAS classique, pas Guide.
Si tu sors tous les résultats pertinents avec des procs REPORT et que tout le reste n'a aucun intérêt à être affiché, tu peux mettre en tête de ton programme et en toute fin Ca devrait filtrer uniquement les sorties de REPORT. Et ça a l'intérêt de ne pas faire de NOPRINT, qui se percute effectivement de front avec l'ODS. Ouille. Olivier |
|
|
00
|
|
|
#18 |
|
Membre habitué
![]() Julien Ingénieur d'études / Biostatisticien Inscription : décembre 2009 Messages : 304 ![]() |
Merci pour vos réponses, aprés avoir continuer à regarder mon souci je pense que la seule solution est une combinaison de ce que vous m'avez dit + un controle totale sur chaque sortie pour faire en sorte de ne pas les accumuler à force de parcours ma macro.
Ca promet d'être long et... tellement... hmm... passionant mais bon au moins ma macro quand elle marchera niquel j'aurais l'impression d'avoir mérité mes louanges lol! Encore merci. EDIT: un p'tit un edit pour préciser que ça marche niquel quelque soit la taille des données maintenant que j'ai bourré ma macro d'ODS EXCLUDE pour chaque tables à supprimer précisément. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com