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.
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.
hello,
avec %copy , le code compilé est affiché dans la LOG.
sinon il faut rajouté le outfile=;
Exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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";
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 ?
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 libname rep "C:\temps\macro"; options mautosource SASMSTORE=rep mstored;*sasautos=rep; %Test ;
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 ?
non , il faut compiler la macro avant de l'enregistrer.
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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;
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.
as-tu essayé le code que je t'ai donné? ( le dernier)
Désolée de ne pas super bien comprendre mais à quoi correspond
dictionary.catalogs
dans ton code ?
Ca me crée une table vide : j'abandonne ces macros resteront des macros fantomes sans codes !
Merci pour ton aide.
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 data vue_cat; set sashelp.vcatalg; run;
Oups je m'étais trompé ça me crée une table avec la description des macro (date de création, de modif).
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2options nolabel ;
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
c'est ce que je disais , pour pouvoir réutilisé une macro déjà enregistrer dans un catalogue, il faut utiliser :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 libname source "C:\temp\macro"; OPTIONS MSTORED SASMSTORE = source ;
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.
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 avecqui traceront l'exécution du code macro. Mais il faudra reconstruire le code source toi-même.
Code : Sélectionner tout - Visualiser dans une fenêtre à part OPTION MPRINT MLOGIC SYMBOLGEN ;
Bon courage.
Olivier
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager