support clients / FAQ

SAS/Base® – Macro-language

FAQs

  • Comment utiliser la macro-variable SYSDATE ? Réponse
  • Exemple - Comment récupérer le nombre d'observations d'une table dans une macro variable ? Réponse
  • Comment procéder pour que plusieurs utilisateurs puissent accéder de façon simultanée à un catalogue de macro programmes compilés ? Réponse
  • Comment sécuriser le code source d'un macro-programme SAS ? Réponse 

Autres FAQs SAS/Base®

Généralités | Procédures, Instructions et Fonctions | Traitement des fichiers externes | Interface, Log, Output | Exemples | ODS

Réponses

 

Comment utiliser la macro-variable SYSDATE ?

Caractéristiques :
  • Catégories : SAS/Base
  • OS : Unix, Windows, z/Os
  • Version : SAS® 8.2 et au-delà
  • Vérifié en octobre 2009

   put date ddmmyy8. ;
run ;


Ce qui donne ce résultat dans la log :
08/11/09

Aide en ligne : SAS 9.2, SAS 9.1, SAS 8.2

Retour Haut 
Caractéristiques :
  • Catégories : SAS/Base
  • OS : Unix, Windows, z/Os
  • Version : 9 et au-delà
  • Vérifié en décembre 2010

Exemple - Comment récupérer le nombre d'observations d'une table dans une macro variable ?  

Il y a 2 possibilités :

  • Depuis une étape DATA, en utilisant l'option NBOBS ou bien en utilisant _N_  :

data _null_;
set sashelp.class end=last ;
if last then call symput ("NbObs",_N_);
run;
%put %bquote(Le nombre d'observations de la table est &NbObs)  ;

data _null_;
set sashelp.class end=last ;
if last then call symput ("NbObs",_N_);
run;
%put %bquote(Le nombre d'observations de la table est &NbObs)  ;

  • En macro language, avec la fonction ATTRN :

%macro NbObs (dsIN=_last_);
%let nvars=;
%let dsid=%sysfunc (open (&dsIN)) ;
%let nobs=%sysfunc (ATTRN (&dsid, nlobs)) ; %put &nobs ;
%let dsid=%sysfunc (close (&dsid)) ;
%mend;
% NbObs (dsIN=sashelp.class);
 

Aide en ligne :  SET Statement, ATTRN 

Retour Haut 
Caractéristiques :
  • Catégories : SAS/Base
  • OS : Unix, Windows, z/OS
  • Version : SAS® 8.2 et au-delà
  • Vérifié en Février 2010

Comment procéder pour que plusieurs utilisateurs puissent accéder de façon simultanée à un catalogue de macro programmes compilés ?

Pour partager un catalogue de macro, il faut procéder en 2 étapes :

  • d'une part, il faut stocker le macro-programme dans une bibliothèque autres que la WORK :

libname MyLib "C:\My SAS Files\Macros\" ;
options MSTORED SASMSTORE=MyLib;
%macro Bonjour  / STORE ;
%put Bonjour &sysuserid ! ;
%mend ;
%Bonjour ;

  • d'autres part, dans les sessions suivantes, on accède à cette librairie en mode "lecture seulement" (sachant que toutes les sessions doivent avoir un accès en mode lecture uniquement):

libname MyLib " C:\My SAS Files\Macros\" ACCESS=READONLY;
options mstored sasmstore=MyLib;
%Bonjour ;

Aide en ligne :  Saving Macros Using the Stored Compiled Macro Facility 

Retour Haut 
Caractéristiques :
  • Catégories : Macro-langage
  • OS : Windows, Unix, z/OS
  • Version : 9.1.3, 9.2
  • Vérifié en juin 2011
Comment sécuriser le code source d'un macro-programme SAS ? 

La clé est de sécuriser la source en utilisant les options SECURE et STORE sur la ligne de déclaration d'une macro (%MACRO). L'option SECURE empêche le code d'être vu, une fois compilé. L'option STORE enregistre les macros compilées à l'emplacement spécifié dans la bibliothèque spécifiée.

Voici un exemple pour sécuriser la source d'une macro SAS.

/* La bibliothèque pour stocker les macros est nommée 'mylib' */
libname mylib 'c:\temp';
options mstored sasmstore=mylib;

/* Cette macro est stockée au format texte */
%macro nonsecure/store;
data _null_;
x=1;
put "Cette étape DATA a été générée à partir d'une macro non-sécurisée.";
run;
%mend nonsecure;

%nonsecure
filename maccat catalog 'mylib.sasmacr.nonsecure.macro';
data _null_;
infile maccat;
input;
list;
run;

/* Cette macro est cryptée */
%macro secure/store secure;   
data _null_;
x=1;
put "Cette étape DATA a été générée à partir d'une macro sécurisée.";
run;
%mend secure;
%secure
filename maccat catalog 'mylib.sasmacr.secure.macro';
data _null_;
infile maccat;
input;
list;
ac run;

Aide en ligne :  %MACRO Statement 
How to Hide Code Used in SAS® Stored Processes That Are Associated with SAS® Information Maps  

Retour Haut