Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > Macro
Macro Forum d'entraide sur le langage Macro de SAS
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/10/2011, 09h25   #1
Membre habitué
 
Homme Julien
Ingénieur d'études / Biostatisticien
Inscription : décembre 2009
Messages : 304
Détails du profil
Informations personnelles :
Nom : Homme Julien
Localisation : France

Informations professionnelles :
Activité : Ingénieur d'études / Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : décembre 2009
Messages : 304
Points : 101
Points : 101
Par défaut Récupérer nom d'une table dans une macro-variable

Salut, afin de ne pas me prendre de conflits entre ma table d'entrée et les différentes tables que je conçois dans mes macros, j'aimerais en entrée de programmes pouvoir comparer le nom de ma table d'entrée avec toutes celles à venir.

Comment qu'on fait? en fait je me doute que la réponse est sur le forum mais aprés plusieurs tentative j'ai pas trouvé mon bonheur
joyeux_lapin13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2011, 10h14   #2
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 828
Points : 2 828
Bonjour Julien.
Je ne connais pas de méthode automatique pour éviter les conflits que tu évoques. Sauf éventuellement faire planter SAS en cas d'écrasement d'une table existante : OPTION NOREPLACE ; mais ça ne fonctionne que sur les tables hors Work de toute façon.
Sinon, il reste les %IF, soit en début de macro-programme (attention le IN ne marche pas follement bien en macro-langage, donc plutôt des égalités séparées par des OR) soit au fur et à mesure des étapes créant des tables.
Quelques petites choses anodines à garder en tête :
1) penser que WORK peut être omis dans la valeur fournie en paramètre par l'utiliser. La condition pour le savoir est %INDEX(&tableEntree,.) > 0 --> il y a un nom de bibliothèque.
2) penser à mettre en majuscules tout ce qu'on compare avec %UPCASE
3) éventuellement, %SYSFUNC(EXIST(&tableEntree))=0 indique que la table n'existe pas déjà.

Bon courage.
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/10/2011, 12h12   #3
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 012
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 012
Points : 1 713
Points : 1 713
Citation:
Envoyé par joyeux_lapin13 Voir le message
Salut, afin de ne pas me prendre de conflits entre ma table d'entrée et les différentes tables que je conçois dans mes macros, j'aimerais en entrée de programmes pouvoir comparer le nom de ma table d'entrée avec toutes celles à venir.


Hello ;
Pas sûre d’avoir compris. Tu veux comparer les noms ? pour ?
Sinon autre alternative à l’option d’Olivier , t’as aussi l’option de libname ACCESS=READONLY ;
- Si t’écrases au fur à mesure tes tables ( mêmes nom) tu peux utiliser les option
Genmax=n et pour reconstituer la table souhaitée c’est GENNUM=n pour la première table c’est GENNUM=1
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/10/2011, 10h28   #4
Membre habitué
 
Homme Julien
Ingénieur d'études / Biostatisticien
Inscription : décembre 2009
Messages : 304
Détails du profil
Informations personnelles :
Nom : Homme Julien
Localisation : France

Informations professionnelles :
Activité : Ingénieur d'études / Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : décembre 2009
Messages : 304
Points : 101
Points : 101
Salut et merci Olivier et Sam pour vos réponses!

J'appel "conflit" quand, par exemple, je vais appeler ma table de données sur laquelle travailler: 'DATA' et qu'au cours de ma macro je créé une table de résultats 'DATA' écrasant la table de données qui comptait être utilisée dans la suite de mon programme.

Ce que j'aimerais c'est: ajouter une clause (à la main en comparant directement) qui lance mon automate uniquement si la table de données en entrée ne porte pas le même nom qu'une des tables de résultats qui sera générée.

L'idée finale je l'ai: comparer l'intitulé de ma table avec celui de toutes les tables que je vais récapitulé (à la main), par contre ce qui me manque c'est de pouvoir mettre dans une macro-variable directement le nom de ma table.
Alors je réfléchissais sur la proc CONTENTS qui renvoit cette info, seulement j'ai parcouru le site de SAS et je n'arrive pas à trouver le bon output qui permet de récupérer la table en question (FILENAME)... si quelqu'un sait?
joyeux_lapin13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2011, 10h36   #5
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 012
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 012
Points : 1 713
Points : 1 713
Hello Julien;
(toujours pas compis !!!)
Ce programme renvoie le nom des tables et la date de création/modification dans l'ordre.
Code :
1
2
3
4
5
6
 
 
proc sql;
CREATE TABLE tab AS SELECT memname AS tab_name, crdate AS dt_creat format datetime.  FROM dictionary.TABLES  WHERE upcase(libname)='WORK'
ORDER BY dt_creat;
quit;
Dans une étape ,avec un call symput et un une condition _n_=1 tu peux récuperer le nom de la première table créée dans la Work dans une macro variable.

Après pour récuperer les noms de toutes tes tables tu peux faire un select into: dans la proc sql. Puis faire ta comparaison
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/11/2011, 10h03   #6
Membre habitué
 
Homme Julien
Ingénieur d'études / Biostatisticien
Inscription : décembre 2009
Messages : 304
Détails du profil
Informations personnelles :
Nom : Homme Julien
Localisation : France

Informations professionnelles :
Activité : Ingénieur d'études / Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : décembre 2009
Messages : 304
Points : 101
Points : 101
Merci Olivier et Sam pour votre aide! j'ai de quoi faire grace à vous désormais!
joyeux_lapin13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h47.


 
 
 
 
Partenaires

Hébergement Web