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 21/06/2011, 12h38   #1
Invité de passage
 
Inscription : juin 2011
Messages : 12
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 12
Points : 3
Points : 3
Par défaut Lire macro catalogue sasmacr

Bonjour,

Je souhaite lire le code de macros compilées dans un catalogue sas. J'ai lu que la macro %copy pouvait peut etre me donner acces au code mais je n'arrive pas à l'utiliser.

Merci de votre aide.
sasmacr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 13h16   #2
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
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 006
Points : 1 703
Points : 1 703
hello,
avec %copy , le code compilé est affiché dans la LOG.

sinon il faut rajouté le outfile=;

Exemple:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
 
 libname source "C:\temps";
 OPTIONS MSTORED SASMSTORE = source ;
 
 
 %macro test(arg) /store source
     des="discription de la macro";
 
	 DATA test;
	 SET sashelp.class;
	 IF age=&arg;
	 run;
 
%mend ;      
 
%copy test/source OUTFILE="c:\temps\sas.sas";
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 14h33   #3
Invité de passage
 
Inscription : juin 2011
Messages : 12
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 12
Points : 3
Points : 3
Merci pour ta réponse,

En effet la macro copy fonctionne pour récupérer une macro que je viens de compiler. Mais en fait mon problème est que j'ai récupéré un catalogue sas comprenant différentes macros et je voudrais accéder au code de ces macros. Or dans ce cas :

%copy nom_de_la_macro / store source;

ne me permet pas de visualiser le code.
Existe-t-il une solution ?
sasmacr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 14h41   #4
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
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 006
Points : 1 703
Points : 1 703
bah,
il faut poster ton code pour voir ce que t'as mis de dans.
l'appel de macro compilé ce fait comme ceci.
1- libname vers le repertoire où se trouve ton catalogue macro.
2- utiliser les options suivantes: mstored ,....comme ceci;
si t'as un macro déjà compilée qui s'appel TEST.


Code :
1
2
3
4
5
6
 
 
libname rep "C:\temps\macro";
 
options   mautosource SASMSTORE=rep  mstored;*sasautos=rep;
%Test  ;
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 15h05   #5
Invité de passage
 
Inscription : juin 2011
Messages : 12
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 12
Points : 3
Points : 3
Je suis désolée mais j'ai vraiment du mal à comprendre.

1-j'ai fait le libname vers le répertoire contenant le catalogue de macro.

Mon problème est que je n'ai jamais compilé ces macros puisque justement je ne connais leur code.
Je peux acceder aux codes de macros que je n'ai jamais compilées ?
sasmacr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 15h16   #6
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
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 006
Points : 1 703
Points : 1 703
non , il faut compiler la macro avant de l'enregistrer.
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 15h23   #7
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
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 006
Points : 1 703
Points : 1 703
je rajoute,
Pour savoir s'il existent des macro compilées dans un répertoire donné

tu peux faire ceci : (ici je teste : C:\temps\macro)

Code :
1
2
3
4
5
6
7
8
9
10
 
libname rep "C:\temps\macro";
proc sql noprint;
 
CREATE TABLE mes_macro AS SELECT /*libname, objname as macro*/  * FROM dictionary.catalogs 
WHERE
     upcase (memname) ='SASMACR'
AND 
     UPCASE(libname)="REP";
quit;
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 15h24   #8
Invité de passage
 
Inscription : juin 2011
Messages : 12
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 12
Points : 3
Points : 3
D'accord, étant donné que j'ai récupéré ce catalogue de macro et que je ne l'ai pas créé, ces macros n'ont pas été compilées.
Je suppose qu'il n'est pas possible de récupérer dans ce cas le code.

Merci.
sasmacr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 15h27   #9
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
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 006
Points : 1 703
Points : 1 703
as-tu essayé le code que je t'ai donné? ( le dernier)
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 15h40   #10
Invité de passage
 
Inscription : juin 2011
Messages : 12
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 12
Points : 3
Points : 3
Désolée de ne pas super bien comprendre mais à quoi correspond
dictionary.catalogs
dans ton code ?
sasmacr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 15h46   #11
Invité de passage
 
Inscription : juin 2011
Messages : 12
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 12
Points : 3
Points : 3
Ca me crée une table vide : j'abandonne ces macros resteront des macros fantomes sans codes !
Merci pour ton aide.
sasmacr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 15h48   #12
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
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 006
Points : 1 703
Points : 1 703
Bon, pour faire simple on va dire c'est des vues (tables) cachées ( il y a que sas qui les voie, puis on ne peux les utiliser que dans la proc SQL).
il y a l'équivalent de chaque vue dictionary dans la librerie Sashelp et pour les vues catalogue , tu trouves la mêmes chose dans "sashelp.vcatalg"
Code :
1
2
3
4
 
DATA vue_cat;
SET sashelp.vcatalg;
run;
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 15h49   #13
Invité de passage
 
Inscription : juin 2011
Messages : 12
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 12
Points : 3
Points : 3
Oups je m'étais trompé ça me crée une table avec la description des macro (date de création, de modif).
sasmacr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 15h56   #14
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
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 006
Points : 1 703
Points : 1 703
bah oui c'est sa; tu trouves les noms de tes macro compilées dans la colonnes objname ajoutes
pour voir les noms de colonnes.
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 16h17   #15
Invité de passage
 
Inscription : juin 2011
Messages : 12
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 12
Points : 3
Points : 3
dans cette colonne je vois le noms des macros auxquelles je veux acceder ainsi que la macro test que tu m'a donnée.
Lorsque je veux visualiser le code de la macro test il n'y a aucun problème par contre lorsque je veux faire la même opération avec les autres macro j'ai les messages d'erreur suivants qui s'afichent :

L'option source n'a pas été spécifiée lorsque la macro Pat a été compilée
sasmacr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 16h30   #16
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 006
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 006
Points : 1 703
Points : 1 703
c'est ce que je disais , pour pouvoir réutilisé une macro déjà enregistrer dans un catalogue, il faut utiliser :

Code :
1
2
3
 
 libname source "C:\temp\macro";
 OPTIONS MSTORED SASMSTORE = source ;
s_a_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 16h35   #17
Invité de passage
 
Inscription : juin 2011
Messages : 12
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 12
Points : 3
Points : 3
Voici un lien ou tu trouves un catalogue de macro :
http://www.unige.ch/ses/sococ/eda/sas/welcome.html

Je n'arrive toujours pas malgré toutes tes explications (encore merci) à voir le code de ces macros.
sasmacr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 07h52   #18
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 823
Points : 2 823
Bonjour.
Un catalogue de macros ne contient que des programmes déjà compilés. L'opération de compilation crypte partiellement le code. Si la personne qui a créé le catalogue n'a pas ajouté d'option SOURCE aux macro-programmes, et visiblement le message de %COPY va dans ce sens, c'est raté : tu ne verras jamais le source des macro-programmes.
C'est d'ailleurs un des "avantages" des catalogues de macros : on peut les diffuser sans se faire pirater son code source.

Tu peux toujours essayer d'exécuter les macros avec
Code :
OPTION MPRINT MLOGIC SYMBOLGEN ;
qui traceront l'exécution du code macro. Mais il faudra reconstruire le code source toi-même.
Bon courage.
Olivier
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h48.


 
 
 
 
Partenaires

Hébergement Web