|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité régulier
![]() |
salut,
je souhaite mettre à jour une table par l'intermédiaire d'une boucle do until, mais lorsque je mets une proc sql dans la boucle pour que la variable soit remis a jour avant chaque execution de la condition, la boucle plante!! ![]() Et si je mets pas la proc sql la condition d'arret ne pourra jamais etre atteinte! est ce que quelqu'un saurait dire comment faire?? voici mon code : Code :
++
|
||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() ![]() |
Je ne pense pas que SAS accepte de faire des proc sql; ou autres procédure dans une étape data??!!
|
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() |
effectivement c est pas sur qu'il accepte une procédure dans un data, mais une boucle do doit toujours être dans une étape data ???????
alors comment fait on pour repeter plusieurs fois une procedure quelconque?? Y a t il une syntaxe spécial?? merci. |
|
|
00
|
|
|
#4 |
|
Membre confirmé
![]() Inscription : avril 2008 Messages : 233 ![]() |
Boucle dans la macro ? Quel est ton besoin ? Que veux-tu faire avec cette proc sql boucleé ?
|
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() ![]() |
Ton code est trop bizzare !!!
DATA precision_essai; SET DATA.precision; => table en lecture proc sql; CREATE TABLE DATA.precision AS => table en ecriture Déja la il y a un gros problème : je ne sais pas comment SAS va réagir. Il y a un problème d'algorithmique |
|
|
00
|
|
|
#6 | ||
|
Membre Expert
![]() ![]() |
Ce code suivant, montre comment exécuter une macro pour chaque valeur d'une table.
Code :
|
||
|
|
00
|
|
|
#7 |
|
Invité régulier
![]() |
en fait la condition if de ma boucle, et par conséquent ma boucle me sert à réajuster la valeur d'une variable (N_o). ms celle ci est basé sur les valeurs de deux variables (somme_N_o et max_dec_N_o) qui doivent etre remises à jour à chaque tour de boucle!! elle sont a l'origine créées par la proxc sql! c est donc pour ca que je veux bouclé la proc sql!!
Ms je n arrive pas a trouver de solutions avec ou sans boucle!! question pas facile! ms toutes les reponses ou supposition m aideront! merci. |
|
|
00
|
|
|
#8 | ||
|
Membre chevronné
![]() ![]() |
Bahraoui a raison, il ne faut pas confondre le langage base et macro. Pour ton problème il faut surement passer par du langage macro.
Si tu fais do until (somme_N_o = N_a); il faut forcément défine N_a sinon tu boucle indéfiniment étape 1 : sépare tes étapes DATA des étapes PROC étape 2 : défini N_a comme macro variable et initialise le. étape 3 : Met tes PROC SQL dans une macro et récupère le résultat dans une macro variable à l'aide de into: ex : Code :
il faut y aller étape par étape. bon courage Steel |
||
|
|
00
|
|
|
#9 | |
|
Membre confirmé
![]() Inscription : avril 2008 Messages : 233 ![]() |
Citation:
1. Qu'est-ce que tu as comme table d'entré ? Un exemple avec des datalines. 2. Qu'est ce que tu veux faire ? Une explication pas obligatoirement en SAS, en français ça peut aller. |
|
|
|
00
|
|
|
#10 | ||
|
Invité régulier
![]() |
j'ai suivi vos conseils, et cela et presque bon!
il me reste juste un pti detail qui va pas. j ai donc fait une boucle macro, mais celle ci boucle indefiniment car mes variables somme_N_o et N_a existe deja au depart dans ma table d'origine (data.precision). Et celle ci ne sont pas remplacées lors de l'execution des Proc SQL sensées regénérer ces variables. ce qui fait que la condition ne peut jamais etre atteinte. voici mon code : Code :
Et dans la condition somme_N_o et N_a sont deux variables de ma table d'origine, elles ont donc une valeur différente à chaque ligne. et ne sont pas des variables du programme à initialiser au départ puisqu'elles prennent les valeurs de la table. De meme comme vous pouvez voir en commentaire dans le code, j'ai essayé d'ajouter un compteur afin d'incrémenter les variables créées de la valeur de celui-ci. c'etait dans le but de créer une variable différente à chaque fois pour ne pas avoir le probléme de la variable déjà existente. Comment puis je faire face à ce problème??? ![]() Merci. |
||
|
|
00
|
|
|
#11 | ||||
|
Membre Expert
![]() ![]() |
Normal que ta macro boucle !!
(somme_N_o /*&i*/ = N_a); Problème 1 : (&somme_N_o /*&i*/ = &N_a); On accéde à la valeur d'une macro variable, on mettant un &avant le nom de la variable. Problème 2: les variables somme_N_o et N_a ne change pas dans ton code!!! Comment créer une macro variable dans uen étapde data; Code :
Code :
|
||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com