Caractéristiques
: |
 |
 |
- Catégories : SAS/Base
- OS : Windows, Unix
- Version : SAS 8.2, SASŪ 9.1.3
- Vérifié le 01/12/2006
|
 |
 |
L’exécution
de commandes Système depuis SAS
Au cours d’un traitement SAS, vous avez parfois besoin d’interagir
directement avec le système d’exploitation. Les besoins sont
divers : créer un répertoire pour stocker une table, lister
le contenu d’un répertoire à la recherche d’un
fichier ou récupérer la valeur d’une variable d’environnement.
SAS permet l’exécution de commande système et la récupération
du résultat dans une variable ou l’affichage du résultat
dans le journal.
Plusieurs instructions SAS permettent d’effectuer ces tâches
:
- X
- Call system
- %sysexec
- Systask
- Filename pipe
X, call system et %sysexec
Ces instructions sont équivalentes. Elles permettent l’exécution
d’une commande Système sans quitter la session SAS et sans
récupérer de résultat.
- Exemple d’utilisation de la commande X :
x 'mkdir /local/data/rep1';
x 'ls -al /local/data/rep1';
Si une commande comme ‘ls’ ou ‘dir’ est exécutée
depuis SAS, le résultat est affiché dans la fenêtre
Shell (Unix) ou DOS.
- Exemple d’utilisation de la routine CALL SYSTEM :
data _null_;
call system ('cd /users/smith/report');
run;
En exécutant la commande ‘cd /users/smith/report’,
toute recherche d’un fichier renseigné avec l’instruction
‘filename’ et avec un chemin relatif se fera à partir
du répertoire ‘/users/smith/report’.
- Exemple d’utilisation de la fonction macro %SYSEXEC :
%macro pwdls;
%sysexec %str(pwd;ls -l);
%mend pwdls;
%pwdls;
Il faut remarquer dans cet exemple que la fonction ‘%sysexec’
permet l’exécution de plusieurs commandes dans la même
instruction.
Instruction ‘systask’
L’instruction ‘systask’ autorise l’exécution
des commandes de façon asynchrone. Autrement dit, la commande va
s’exécuter en arrière plan et le programme SAS va
pouvoir traiter les instructions suivantes.
‘Systask’ permet non seulement d’exécuter une
commande OS, mais aussi de récupérer le résultat
dans une macro variable SAS ou dans le journal. Elle permet également
l’affichage des tâches en cours ou l’arrêt d’une
tâche, si nécessaire.
systask command "cp /tmp/p.log /local/users/fracaa/"
taskname="copyjob1"
status=copysts1 shell;
Dans le Journal on obtient :
50 systask command "cp /tmp/p.log /local/users/fracaa/"
taskname=copyjob1
51 status=copysts1 shell;
NOTE: Task "copyjob1" produced no LOG/Output.
Dans la commande ci-dessus, ‘systask’ a permis d’exécuter
la commande système Unix ‘cp’ pour copier le fichier
‘/tmp/p.log’ sur le répertoire ‘/local/users/fracaa’.
Nous avons donné à cette tâche le nom de ‘copyjob1’
et nous avons récupéré le code retour dans la macro
variable copysts1. Le contenu de cette macro variable peut être
affiché dans le journal de SAS avec l’instruction ‘%put
©sts1 ;’.
Pour mettre fin à la tâche ‘copyjob1’, quand
la commande système ‘cp’ est terminée, il faut
utiliser l’instruction ‘waitfor’ :
waitfor _all_ copyjob1;
Il est possible également de mettre fin à cette tâche,
même si la commande système n’est pas finie, par l’instruction
:
systask kill copyjob1;
L’affichage du statut des commandes lancées et en cours
d’exécution, se fait avec l’instruction suivante :
systask list _all_;
Dans le Journal on obtient :
"copyjob1" --------------
Type: Task
State: COMPLETE
Status Macro Variable: copysts1
systask list _all_;
Instruction ‘filename pipe’
L’instruction ‘filename pipe’ permet d’exécuter
une commande Système et de récupérer son résultat
dans une variable SAS ou dans le journal :
options ls=132 obs=max;
/* affichage des variables d'environnement */
filename test1 pipe "set";
data _null_;
length text $132;
infile test1 truncover;
input text 1-132;
put text=;
run;
Cette syntaxe produit un résultat identique à celle de
la fonction ‘systask’ suivante :
systask command "set" wait taskname="test"
shell;
Le résultat d’une telle commande peut être utile
pour connaître les valeurs de certaines variables d’environnement
sous Unix.
Nous avons un cas précis dans le fonctionnement des modules SAS/ACCESS®.
Pour faire la liaison entre SAS et les bibliothèques d’une
autre base de données, il est nécessaire sous Unix, de déclarer
certaines variables d’environnement. L’accès ne se
fait pas si l’initialisation de ces variables n’a pas été
effectuée correctement. Dans ce cas, l’affichage des valeurs
de ces variables dans une session SAS peut permettre de valider ou non
la configuration mise en place.
1 options ls=132 obs=max;
2
3 /* affichage des variables d'environnement */
4 filename test1 pipe "set";
5 data _null_;
6 length text $132;
7 infile test1 truncover;
8 input text 1-132;
9 put text=;
10 run;
NOTE: The infile TEST1 is:
Pipe command="set"
text=_=/local/data/obelix/UNEDIC/SAS_9.1/sasexe/sas
text=AIXTHREAD_COND_DEBUG=OFF
text=AIXTHREAD_MNRATIO=1:1
text=AIXTHREAD_MUTEX_DEBUG=OFF
text=AIXTHREAD_RWLOCK_DEBUG=OFF
text=AIXTHREAD_SCOPE=S
text=AUTHSTATE=compat
text=DISPLAY=139.96.81.116:0.0
text=ERRNO=25
text=FCEDIT=/usr/bin/ed
text=HOME=/
text=IFS='
text='
text=inetd_dummy=xxx
text=Install_TKPATH=0/local/data/obelix/SAS_9.1/sasexe:/local/data/obelix/SAS_9.1/utilities/bin
text=LANG=fr_FR
text=LC__FASTMSG=true
text=LDR_CNTRL=LOADPUBLIC
text=LIBPATH=/local/data/obelix/SAS_9.1/sasjre/1.4.0/bin/:/local/data/obelix/
SAS_9.1/sasjre/1.4.0/bin/classic/:/local/data/
text=LINENO=1
text=LOCPATH=/usr/lib/nls/loc
text=LOGIN=root
text=LOGNAME=root
text=MAILCHECK=600
text=NLSPATH=/usr/lib/nls/msg/%L/%N:/usr/lib/nls/msg/en_US/%N:/usr/lib/nls/
msg/%L/%N.cat:/usr/lib/nls/msg/en_US/%N.cat
text=ODMDIR=/etc/objrepos
text=OPTIND=1
text=ORACLE_HOME=/local/data/obelix/oracle/oracle/product/10.2.0/db_1/
text=PAM_SERVICE=ftp
text=PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin:/usr/java14/jre/bin:/usr/java14/bin
text=PPID=295028
text=PS2='> '
text=PS3='#? '
text=PS4='+ '
text=PWD=/
text=RANDOM=26104
text=SAMPSIO='('\''!SASROOT/samples/base'\'' '\''!SASROOT/samples/connect'\''
'\''!SASROOT/samples/dbi'\'' '\'
text=SAMPSRC='('\''!SASROOT/samples/base'\'' '\''!SASROOT/samples/connect'\''
'\''!SASROOT/samples/dbi'\'' '\'
text=SAS_ALT_DISPLAY=:0.0
text=SASAUTOS=!SASROOT/sasautos
text=SASCFGPATH='!SASROOT/sasv9.cfg, !SASROOT/nls/en/sasv9.cfg, !SASROOT/sasv9_local.cfg'
text=SASROOT=/local/data/obelix/SAS_9.1
text=SECONDS=0
text=SHELL=/usr/bin/ksh
text=TERM=xterm
text=TK_Default_Options=0
text=TKPATH=/local/data/obelix/SAS_9.1/sasexe:/local/data/obelix/SAS_9.1/utilities/bin
text=TMOUT=0
text=TZ=NFT-1DFT,M3.5.0,M10.5.0
text=USER=root
text=WINDOWID=8388621
NOTE: 51 records were read from the infile TEST1.
The minimum record length was 1.
The maximum record length was 256.
One or more lines were truncated.
NOTE: DATA statement used (Total process time):
real time 0.26 seconds
cpu time 0.01 seconds
Pour plus de renseignements : Documentation
Online SAS
Càtalin Aldea
Consultant Support Clients - SAS France
|