SAS/Base® – Procédures, Instructions et Fonctions

Articles parus

FAQs

  • Comment crypter un mot de passe utilisateur depuis SAS ? Réponse 
  • Comment positionner des variables système Unix lors d'une session SAS ? Réponse
  • Comment exécuter un script externe depuis SAS ? Réponse
  • Comment calculer les numéros de semaine ? Réponse
  • Comment récupérer une variable d'environnement Windows sous SAS ? Réponse
  • Comment obtenir le numéro du jour de la semaine d'une date donnée ? Réponse
  • Comment réparer toutes les tables d'une bibliothèque ? Réponse
  • Comment signaler la fin de l'exécution d'un programme ? Réponse
  • Comment extraire une date et une heure d'une variable de type datetime ? Réponse
  • En SAS9, comment extraire la position d'un mot d'une chaîne de caractère sans être sensible à la casse ? Réponse
  • Depuis SAS, comment envoyer un email en insérant du texte formaté dans le corps du message ? Réponse
  • Dans une chaîne de caractères, comment mettre la première lettre de chaque mot en majuscule et les autres lettres en minuscule ? Réponse
  • Comment utiliser les variables d'environnement système dans un programme SAS ? Réponse
  • Comment obtenir la liste des formats présents dans une bibliothèque ? Réponse
  • Comment convertir une variable numérique en variable caractère, et inversement ? Réponse
  • Comment supprimer un format par programme SAS ? Réponse
  • Comment exécuter un script externe depuis SAS ? Réponse
  • Comment créer un format pour afficher la date ou un datetime au format dd/mm/yyyy ? Réponse 

Autres FAQs SAS/Base®

Généralités | Macro-langage | Traitement des fichiers externes | Interface, Log, Output | Exemples | ODS

Réponses

Caractéristiques :
  • Catégories : SAS/Base
  • OS : Unix, Windows, z/OS
  • Version : SAS® 9.1.3 et au-delà
  • Vérifié en février 2011

Comment crypter un mot de passe utilisateur depuis SAS ?

Vous pouvez être amenés à spécifier des mots de passe d'utilisateur lorsque vous travaillez avec SAS. Pour crypter ces mots de passe, vous pouvez utiliser la procédure PWENCODE disponible depuis SAS 9.1.

PROC PWENCODE in="your-pw";
RUN;


Aide en ligne :  The PWENCODE Procedure, Allo Support n°16 (PDF)

 
 

 
Caractéristiques :
  • Catégories : SAS/Base
  • OS : Unix
  • Version : SAS® 8.2 et au-delà
  • Vérifié en Janvier 2010
Comment positionner des variables système Unix lors d'une session SAS ?

Il est nécessaire d'utiliser la commande X ainsi que le paramètre « setenv ».

Exemple:
X "setenv TEST 45" ;
La variable TEST prendra la valeur « 45 »

Attention, la valeur de la variable ne sera disponible que pour la session SAS en cours.

Aide en ligne :  Executing Operating System Commands from Your SAS Session 

 
 
 

 
Caractéristiques :
  • Catégories : SAS/Base
  • OS : Windows
  • Version : SAS® 8.2 et au-delà
  • Vérifié en Mars 2010
Comment exécuter un script externe depuis SAS ?

Plusieurs méthodes sont possibles.
Les commandes « X », « systask » et « call system » permettent d’exécuter des commandes ou des fichiers de script « BAT » depuis SAS.

Voici un exemple de chaque syntaxe :

a/ Commande X

X "c:\test\fichier.bat";

b/ Commande Call System

data _null_;
   call system('dir /w');
run;

c/ Commande Systask

systask command "copy fichier1.txt fichier2.txt"
         taskname="copyfile" status=copystat;

d/ Macro %SYSEXEC

%sysexec time;

Aide en ligne : SAS 9 : Running Windows or MS-DOS Commands from within SAS 

 

 
Caractéristiques :
  • Catégories : SAS/Base
  • OS : Unix, Windows, z/OS
  • Version : SAS® 8.2 et au-delà
  • Vérifié en mai 2011
Comment calculer les numéros de semaine ?

SAS9 propose plusieurs méthodes pour déterminer le numéro de la semaine en fonction d’une date SAS :

Si vous utilisez SAS 8.2 ou une version antérieure, vous pouvez utiliser l'une des méthodes suivantes.

  • Ce programme calcule le numéro de semaine de la date courante, sachant qu'une semaine commence le dimanche (norme US) :

data _null_;
  Attrib date length=3. label=’Date’ format=date7. ;
  Attrib semaine length=3. label=’N° de semaine’;

  madate = TODAY();
  semaine = INTCK('week', INTNX('year',madate,0),madate);
  put semaine =;
run;

  • Ce programme calcule le numéro de semaine de la date courante, sachant qu'une semaine commence le lundi :
data _null_;

  Attrib date length=3. label=’Date’ format=date7. ;
  Attrib semaine length=3. label=’N° de semaine’;

  date = TODAY();
  semaine=-1;
  cpt=0;
  do until (semaine>0);
    semaine=int((7*int((date+3156192)/7)+10 - mdy(1,1,year(date)+1 - cpt) - 3156192)/7);
    cpt+1;
  end;
  output;
  put semaine= ;
run;
 
 

 
 
Caractéristiques :
  • Catégories : SAS/Base
  • OS : Windows, Unix
  • Version : SAS® 8.2 et au-delà
  • Vérifié en juin 2010
Comment récupérer une variable d'environnement Windows sous SAS ?

Avec la fonction SYSGET, il est possible de récupérer une variable d'environnement et de l'utiliser dans un programme SAS.

Exemple 1 :
data_null_;
  X = sysget('USERNAME');
  put x=;
run;


Exemple 2 :
%let HOMEDIR=%SYSGET(HOME);
 
 
 
 

 
 
Caractéristiques :
  • Catégories : Base
  • OS : Tous
  • Version : SAS 8.2 et au-delà
  • Vérifié en mai 2011
Comment obtenir le numéro du jour de la semaine d'une date donnée ?

La fonction WEEKDAY retourne le numéro du jour de la semaine d'une date SAS, selon le calendrier anglo-saxon où le dimanche est le 1er jour de la semaine. Il faut donc retirer un jour pour retrouver le calendrier usuel conforme à la norme ISA 8601.
En voici une illustration :

data Datum;
      attrib date format= weekdate17. informat=ddmmyy10. ;

      num_day=weekday (date); 
      If num_day = 1 then num_day = 7;
      else num_day=num_day -1;

      input date : ddmmyy10.;

cards;
03.01.2011
04.01.2011
05.01.2011
06.01.2011
07.01.2011
08.01.2011
09.01.2011

;
run;

proc print noobs;
run;

Aide en ligne :  WEEKDAY function 

 
 
 
 
Caractéristiques :
  • Catégories : Base
  • OS : Tous
  • Version : de 8.2 à 9.2
  • Vérifié en décembre 2010
Comment réparer toutes les tables d'une bibliothèque ?

Voici un exemple de code qui permet de réparer toutes les tables contenues dans la bibliothèque MYLIB.

libname MYLIB "C:\SASWorkspace\test";

%macro  repair ;
  %do i=1%to &dscount;
        repair &&ds&i;
  %end;
%mend;
 
proc sql;
  create table work.listing as
  select memname
    from sashelp.vtable
      where trim(upcase(libname)) = "MYLIB";
quit;
 
data _null_;
  set work.listing;
  call symput("ds"||trim(left(_N_)), memname);
  call symput("dscount", _N_);
run;
 
proc datasets lib= MYLIB nolist;
  % repair ;
run;
 

 
 

 
Caractéristiques :
  • Catégories : Base
  • OS : Tous
  • Version : à partir de SAS 8.2
  • Vérifié en février 2011
Comment signaler la fin de l'exécution d'un programme ?

Un moyen simple, pour savoir si l'exécution d'un programme est terminée, consiste à émettre un son à l'aide de la routine SOUND.
Le code suivant est à inclure à la fin du programme :

data _null_;
  call sound(400,200);
run;

La première valeur représente la fréquence (Hertz) et la deuxième valeur la durée en millisecondes. 

 
 

 
Caractéristiques :
  • Catégories : SAS/Base
  • OS : Unix, Windows, z/OS
  • Version : SAS® 8.2 et au-delà
  • Vérifié en octobre 2009
Comment extraire une date et une heure d'une variable de type datetime ?

Pour récupérer la date, il faut utiliser la fonction DATEPART.
Pour récupérer l'heure, il faut utiliser la fonction TIMEPART.

Exemple :

data _null_;
  variable = '30JUL1970:20:30:00'dt;
  date = datepart(variable);
  heure = timepart(variable);
  put "la date est " date ddmmyy10.;
  put "l'heure est " heure time5.;
run;

Le journal (log) indique :

la date est 30/07/1970
l'heure est 20:30

Aide en ligne :  DATEPART, TIMEPART 

 
 

 
Caractéristiques :
  • Catégories :
  • OS : Windows
  • Version : 9.1.3 et 9.2
  • Vérifié en Mars 2011
En SAS9, comment extraire la position d’un mot d’une chaîne de caractère sans être sensible à la casse ?

Vous devez  utiliser la fonction FIND avec l’option « i ».
La fonction FIND cherche la première occurrence du mot spécifié en paramètre et retourne sa position.
L'exemple ci-dessous compare les résultats obtenus avec la fonction FIND et la fonction INDEX (présente depuis la V8). La fonction index étant elle sensible à la casse.

Exemple :

data _null_;
  /* cherche le mot trouve, insensible à la casse */
  A=find('où se trouve le mot recherché','TROUVE','i'); 
  put A=; /* écrit la valeur de A */

  /* cherche le mot trouve en majuscule uniquement */
  B=index('où se trouve le mot recherché','TROUVE');
  put B=; /* écrit la valeur de B */
run;

Résultats:

  A=7
  B=0 

 
 

 
Caractéristiques :
  • Catégories :
  • OS : Windows
  • Version : 9.1.3 et 9.2
  • Vérifié en Mars 2011
Depuis SAS, comment envoyer un email en insérant du texte formaté dans le corps du message ?

L'utilisation de l'instruction Filename Email permet d'envoyer un email depuis SAS.
Pour formater du texte directement dans le corps du message, il faut utiliser l'instruction PUT combinée à l'instruction Style (alias S) et ses options associées.
Le programme ci-dessous, permet de mettre des caractères en gras, en italique, d’augmenter la taille de la police et également de modifier la couleur :

FILENAME M EMAIL
         TO="destinataire@fra.sas.com"
         FROM="expediteur@fra.sas.com"
         SUBJECT="TEST EMAIL FORMATE"
         TYPE="TEXT/HTML"
         CONTENT_TYPE="TEXT/HTML";  
                                                              
ODS LISTING CLOSE;
ODS HTML BODY=M STYLE=STYLES.DEFAULT RS=NONE;
ODS ESCAPECHAR='*';

DATA _NULL_;
     FILE PRINT;
     PUT 'CE TEXTE EST EN *S={FONT_WEIGHT=BOLD}GRAS*S={}' ;
     PUT 'ET CELUI-CI EST EN *S={FONT_STYLE=ITALIC}italique*S={}.';
     PUT 'CELUI-CI EST  *S={FONT_SIZE=14}GRAND*S={} ET CELUI-CI NON';
     PUT '*S={FOREGROUND=RED}LA COULEUR *S={} PEUT AUSSI ETRE MODIFIEE.';
RUN;
                                                             
ODS HTML CLOSE;                                                 
ODS LISTING;                                                     
FILENAME M;

Résultat :

Depuis SAS, comment envoyer un email en insérant du texte formaté dans le corps du message ?

Attention de ne pas oublier L'instruction ODS ESCAPECHAR, pour que le caractère '*' soit bien reconnu dans les instructions PUT.

NB
: Si vous utilisez un système d’exploitation 64 bits et Outlook, il est possible que l’envoi de mail ne fonctionne pas. Certaines versions d’Office sont restées en 32bits et SAS ne peut pas les utiliser. Vous aurez alors un message vous avertissant qu’aucun logiciel d’envoi de mail par défaut n’a été trouvé. Vous devrez  avoir recours à un serveur SMTP : http://support.sas.com/kb/19/767.html 

 
 
 

 
Caractéristiques :
  • Catégories : SAS/Base
  • OS : Unix, Windows, z/Os
  • Version : 9 et au-delà
  • Vérifié en décembre 2010
Dans une chaîne de caractères, comment mettre la première lettre de chaque mot en majuscule et les autres lettres en minuscule ?

Il faut utiliser la fonction PROPCASE.

Exemple :

Data
Faq ;
X= 'ALLO SUPPORT';
Y=propcase(X);
Put X= Y= ;
Run;

Résultat :
X=ALLO SUPPORT
Y=Allo Support

Documentation : Fonction PROPCASE, Sample 24850: Using the PROPCASE function

 
 
 

 
Caractéristiques :
  • Catégories : SAS/Base
  • OS : Unix, Windows, z/OS
  • Version : SAS® 8.2 et au-delà
  • Vérifié en octobre 2009
Comment utiliser les variables d'environnement système dans un programme SAS ?

La fonction "SYSGET" permet de récupérer le contenu d'une variable d'environnement Système.
Voici un exemple où l'on récupère le nom de l'utilisateur (variable Windows "USERNAME") dans une variable SAS.

data _null_;
  length MONUSER $50;
  MONUSER=sysget(trim("USERNAME"));
  put MONUSER=;
run;

Le principe est le même pour les variables Unix:
MAVARIABLE=sysget(trim("$HOME"));

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 octobre 2010
Comment obtenir la liste des formats présents dans une bibliothèque ?

Il faut utiliser la procédure CATALOG.

Exemple :

Libname FAQ 'C:\';

/* création des formats de tests */
proc format library=FAQ.Formats;
      value $essai
      "O" ="oui"
      "N" ="non";
run;

/* Pour avoir les noms des formats présents dans le libname FAQ */
proc catalog cat=FAQ.formats;
      contents;
      quit;
run;

Résultats :

Si vous souhaitez obtenir les modalités de chacun des formats, il faut utiliser la procédure FORMAT combinée à l'option FMTLIB.

Exemple :

/* Pour voir plus en détails les modalités
de chaque format de la bibliothèque */
Proc format lib=FAQ fmtlib;
run;

Résultats :

Documentation :

 
 

Retour Haut


 
Comment convertir une variable numérique en variable caractère, et inversement ?
Caractéristiques :
  • Catégories : SAS/Base
  • OS : Unix, Windows, z/OS
  • Version : SAS® 8.2 et au-delà
  • Vérifié en octobre 2009


Vous pouvez utiliser respectivement les fonctions PUT et INPUT.

Exemple :

/* NUM est de type numérique, CAR est de type caractère */
data origine;
  input num car $;
  datalines;
12 34
;
run;

data finale;
  set origine;

  /* Conversion numérique en caractère */
  numTOcar=put(num,2.);

  /* Conversion caractère en numérique */
  carTOnum=input(car,2.);
run;

Aide en ligne :

 
 
 
 
 
Caractéristiques :
  • Catégories : SAS/Base
  • OS : Unix, Windows, z/Os
  • Version : 9 et au-delà
  • Vérifié en octobre 2010
Comment supprimer un format par programme SAS ?

Pour un format numérique :

proc catalog cat=work.formats;
      delete NomDuFormat/et=FORMAT;
run; quit;


Pour un format alphanumérique :

proc catalog cat=work.formats;
            delete NomDuFormat/et=FORMATC;
run; quit;

Aide en ligne :
PROC CATALOG > Instruction DELETE 

 
 
 

 
Caractéristiques :
  • Catégories : SAS/Base
  • OS : Unix, Windows
  • Version : SAS® 8.2 et au-delà
  • Vérifié en Janvier 2010
Comment exécuter un script externe depuis SAS ?

La commande X permet le lancement d'un script externe depuis SAS.
Pour un shell, la syntaxe est :
X "/test/fichier.sh"

Aide en ligne :  Unix, Windows

 
 
 
 
 
Caractéristiques :
  • Catégories : SAS/Base
  • OS : Unix, Windows, z/Os
  • Version : 9 et au-delà
  • Vérifié en décembre 2010
Comment créer un format pour afficher la date ou un datetime au format dd/mm/yyyy ?

Vous devez exécuter une Proc Format avec une instruction Picture suivie de l'option datatype=date ou datetime.
L'ajout de caractères spéciaux dans le type de format permet ensuite de définir l'affichage souhaité avec le jour, le mois et l'année.

Exemple :

proc format;
  picture ddmmyyyy other='%0d/%0m/%0Y' (datatype=date);
  picture dtddmmyyyy other='%0d/%0m/%0Y' (datatype=datetime);
run;

data _null_;
  dt='18dec2005 12:34:56'dt;
  put dt dtddmmyyyy.;
  d='14feb2005'd;
  put d ddmmyyyy.;
run;


Résultat dans la fenêtre journal :
      18/12/2005
      14/02/2005

Aide en ligne :  Documentation de la commande PICTURE