|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre habitué
![]() Inscription : janvier 2005 Messages : 527 ![]() |
Bonjour à tous,
Je pense avoir un problème dans l’ordre d’exécution macro/call execute. A la fin de mon programme, je veux supprimer toutes les tables vides de ma work afin qu’il ne reste que celles à traiter : - je mets dans la table alltables tous les noms de mes tables - je parcours la table alltables et j’appelle ma macro killEmptyDS à chaque observation - ma macro killEmptyDS compte le nombre d’observations de la table passée en entrée et le met dans la macrovariable nobs - si nobs vaut 0, la table est supprimée Voici mon code : Code :
Code :
Dans quel ordre faut il executer tout ça pour que nobs prenne la bonne valeur ? Merci de votre aide. |
||||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Biostatisticien Inscription : juin 2009 Messages : 1 143 ![]() |
ca ne réponds pas directement à ta question mais pourquoi ne pas éxécuter une proc contents sur toutes les tables de alltables? tu peux alors sélectionner les tables qui n'ont pas d'observations et les stocker dans une nouvelle table, puis éxécuter une proc dataset par exemple pour supprimer ces tables par exemple..
|
|
|
00
|
|
|
#3 | ||
![]() ![]() Stéphane Consultant et formateur SAS et Cognos Inscription : avril 2009 Messages : 1 791 ![]() |
Positionne un %let nobs=0 avant la proc SQL ou un %SYMDEL nobs à la fin de la macro déjà pour voir.
je serai tenté de proposer de prendre une autre voie en considérant que le nombre d'observations est fourni dans la variable NLOBS. Code :
__________________
N'oubliez pas de cliquer sur lorsque votre problème est réglé !Moteur de recherche dans les papiers SAS |
||
|
00
|
|
|
#4 | ||
|
Membre Expert
![]() ![]() Brice BeareParis Inscription : janvier 2011 Messages : 956 ![]() |
Bonjour,
Visiblement, tu ne peux pas récuperer le nombre d'observation d'une table vide (voir code ci-dessous). Ton problème en est une autre mais sans résoudre celle là, Tu ne pourras la suppimer Code :
|
||
|
|
00
|
|
|
#5 | ||
|
Membre confirmé
![]() Inscription : janvier 2010 Messages : 185 ![]() |
Salut,
Ton problème est un grand classique maintes fois discuté sur ce forum. Tu ne peux pas tester nobs par une condition macro car au moment de l'interprétation du code macro, la procédure sql de décompte n'a pas encore été exécutée. Il faut accéder à nobs d'une autre façon. En utilisant les attributs de la table par exemple : Code :
|
||
|
|
00
|
|
|
#6 |
![]() ![]() Stéphane Consultant et formateur SAS et Cognos Inscription : avril 2009 Messages : 1 791 ![]() |
__________________
N'oubliez pas de cliquer sur lorsque votre problème est réglé !Moteur de recherche dans les papiers SAS |
|
00
|
|
|
#7 | |
|
Membre confirmé
![]() Inscription : janvier 2010 Messages : 185 ![]() |
Chancun est libre en connaissance de cause d'utiliser l'un ou l'autre.
Citation:
|
|
|
|
00
|
|
|
#8 |
![]() ![]() Stéphane Consultant et formateur SAS et Cognos Inscription : avril 2009 Messages : 1 791 ![]() |
of course. Néanmoins je pense qu'il vaut mieux utiliser NLobs qui fonctionne sans se poser de questions sur la nature des données (logiques, supprimées...). Qu'en penses-tu ?
__________________
N'oubliez pas de cliquer sur lorsque votre problème est réglé !Moteur de recherche dans les papiers SAS |
|
00
|
|
|
#9 | ||
|
Membre confirmé
![]() Inscription : janvier 2010 Messages : 185 ![]() |
@datametric : ce n'est pas par esprit de contraction mais quand il n'y a pas lieu d'utiliser autre chose j'utilise nobs.
Pour revenir au problème, on peut aussi utiliser la fonction resolve pour remettre dans l'ordre les 2 étapes 1)création de la macro-variable 2) utilisation de la macro-variable. Code :
|
||
|
|
00
|
|
|
#10 |
![]() ![]() Stéphane Consultant et formateur SAS et Cognos Inscription : avril 2009 Messages : 1 791 ![]() |
Je pense qu'il vaudrait mieux éviter cette proc SQL qui force la lecture de la table alors que notre solution avec nobs ou nlobs
est beaucoup plus efficace.Autre point, il me semble que si tu initialisais nobs=0 avant la proc SQL et si la table ne pouvait pas renvoyer de valeur dans le cas où elle était vide, alors nobs resterait à zéro et le test suivant fonctionnerait.
__________________
N'oubliez pas de cliquer sur lorsque votre problème est réglé !Moteur de recherche dans les papiers SAS |
|
00
|
|
|
#11 |
|
Membre Expert
![]() ![]() |
Bonjour,
Manoutz à proposer une bonne solution. Cordialement Salah
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
|
|
|
00
|
|
|
#12 | |
|
Membre confirmé
![]() Inscription : janvier 2010 Messages : 185 ![]() |
Citation:
Je voulais juste donner un exemple d'utilisation de la fonction resolve qui permet ici de faire se rejoindre l'intention du développeur et le code "call-exécuté". @bahraoui: effectivement la solution de Manoutz est bonne. On peut externaliser la sélection des tables vides et lancer le call execute de destruction (exempt de test sur le nombre d'obs) => plus de souci de désynchro. |
|
|
|
00
|
|
|
#13 | ||
|
Membre Expert
![]() ![]() |
Je vous propose la solution ci-dessous:
proc contents pour déterminer les tables à 0 observations proc sql pour créer une liste avec le nom des tables à 0 obs proc datasets pour supprimer les tables sélectionnées avant Code :
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
|
||
|
|
00
|
|
|
#14 | ||
|
Expert Confirmé
![]() ![]() Olivier DecourtFormateur en informatique Inscription : avril 2008 Messages : 1 467 ![]() |
Je renchéris sur l'excellent programme de Bahraoui pour proposer une variante qui peut chercher les tables vides dans plusieurs bibliothèques, voire toutes, avec la vue système DICTIONARY.TABLES plutôt qu'une procédure CONTENTS.
Code :
|
||
|
|
00
|
|
|
#15 |
|
Membre Expert
![]() ![]() |
c'est encore mieux
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
|
|
|
00
|
|
|
#16 |
![]() ![]() Stéphane Consultant et formateur SAS et Cognos Inscription : avril 2009 Messages : 1 791 ![]() |
la vue système est une ... vue donc je ne suis pas certain qu'en temps d'exécution ce soit mieux. L'un de vous deux peut faire un test ?
__________________
N'oubliez pas de cliquer sur lorsque votre problème est réglé !Moteur de recherche dans les papiers SAS |
|
00
|
|
|
#17 | ||
|
Membre Expert
![]() ![]() |
J'ai fait plusieurs lancements du code ci-dessous la contents est toujours plus rapide.
Code :
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
|
||
|
|
00
|
|
|
#18 |
![]() ![]() Stéphane Consultant et formateur SAS et Cognos Inscription : avril 2009 Messages : 1 791 ![]() |
__________________
N'oubliez pas de cliquer sur lorsque votre problème est réglé !Moteur de recherche dans les papiers SAS |
|
00
|
|
|
#19 |
|
Membre habitué
![]() Inscription : janvier 2005 Messages : 527 ![]() |
Waou !
Je n'ai pas pu revenir sur le forum depuis mon message initial. Alors, je vous remercie tous pour votre aide. J'avoue que je viens seulement de lire vos messages à l'instant, je n'ai rien testé encore, mais je ne doute pas une seconde que ça fonctionne. Un grand merci à tous. Bonne journée |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com