FAQ SASConsultez toutes les FAQ
Nombre d'auteurs : 14, nombre de questions : 232, dernière mise à jour : 20 décembre 2012
Pour sauvegarder un macroprogramme vous devez utiliser les options MSTORED et STORE. Pour sauvegarder votre macroprogramme dans un espace de travail défini par une bibliothèque SAS vous devez ajouter l'option SASMSTORE.
Le code ci-dessous illustre cette notion :
LIBNAME
monEsp "c:/
";
OPTION
MSTORED SASMSTORE=
monEsp;
%MACRO
test /
STORE;
%PUT
Hello;
%MEND
;
Voici comment sécuriser votre code enregistré dans un macroprogramme. Ceci fonctionne en 9.1 et 9.2.
Les résultats des étapes désignées par "la lecture du contenu " sont visibles dans la LOG.
Compilation du code :
options
mstored sasmstore=
sasuser;
%macro
nonsecure/
store; /*
La
macro
est
visible
*/
DATA
_
null_
;
x
=
1;
put
"Cette macro
est générée SANS protection";
run
;
%mend
nonsecure;
%nonsecure
Lecture du contenu :
filename
maccat catalog '
sasuser.sasmacr.nonsecure.macro
'
;
DATA
_
null_
;
INFILE
maccat;
input
;
list
;
run
;
Compilation du code :
%macro
secure/
store secure; /*
Cette
macro
est
chiffrée
*/
data
_
null_
;
x
=
1;
put
"Cette macro
est générée AVEC protection.
";
run
;
%mend
secure;
%secure
Lecture du contenu :
filename
maccat catalog '
sasuser.sasmacr.secure.macro
'
;
DATA
_
null_
;
INFILE
maccat;
input
;
list
;
run
;
Lorsque vous programmez un macroprogramme, il se peut que vous souhaitiez récupérer le traitement de ce macroprogramme dans une macrovariable spécifique. Il faut préciser ceci dans le macroprogramme en rajoutant simplement ce que l'on veut récupérer ainsi :
%macro
concat(var1,var2);
*
Traitement des macrovariables placées en paramètres, par exemple une concaténation ;
%let
tmp1 =
%sysfunc(compress(&var1,%str(%")));
%let
tmp2 =
%sysfunc(compress(&var2,%str(%")));
%put
"&tmp1,&tmp2"; *
Affiche le
résultat de la concaténation des macrovariables temporaires tmp1 et tmp2;
"&tmp1,&tmp2"; *
Précise les éléments à renvoyer par le
macroprogramme;
%mend
;
Il est possible d'attribuer le résultat directement à une autre macrovariable avec la commande suivante :
%let
maVarResultat =
%concat(&var1,&var2);
On peut ensuite réutiliser la variable :
%let
var1 =
"Hello";
%let
var2 =
"World";
%let
maVarResultat =
%concat(&var1,&var2);
%put
Le
résultat renvoyé par la macro
'
%concat
'
est : &maVarResultat;
Affiche : "Hello,World"