
FAQ SASConsultez toutes les FAQ
Nombre d'auteurs : 14, nombre de questions : 232, dernière mise à jour : 20 décembre 2012
 Sommaire→Macro Langage→Macroprogrammes
Sommaire→Macro Langage→MacroprogrammesPour 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;
  %nonsecureLecture 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;
  %secureLecture 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"




