Le script ne lit pas de données externes. Il génère une table de données nommée 'paths' dans la librairie WORK. Le contenu de cette table est dérivé de la valeur de l'option système SAS 'SASAUTOS'.
1 Bloc de code
DATA STEP Data
Explication : Ce bloc définit la macro `%getautos`. Elle utilise une étape DATA pour traiter la chaîne de caractères obtenue via `GETOPTION('sasautos')`. La logique parcourt la chaîne, extrait chaque chemin en utilisant la fonction `SCAN`, gère les guillemets, et effectue des substitutions pour les variables d'environnement (via `SYSGET`) et le tilde (`~`). La fonction `PATHNAME` est utilisée pour résoudre les filerefs. Chaque chemin valide est ajouté à la table de sortie spécifiée par le paramètre `out`.
Copié !
%macro getautos(out=paths);
data &out ( keep = path ) ;
length q $ 32000 temp $ 300 var path $ 255 ;
q = getoption ( "sasautos" ) ;
*-- remove surrounding (), and internal quotes;
if index ( q , "(" ) then
q = left(translate ( q , " " , "()'\"" )) ;
do while ( 1 ) ;
temp = scan ( q || "***" , 1 , "() " ) ;
if temp = "***" then leave ;
q = left(substr ( q , length ( temp ) + 1)) ;
if temp =: "!" then
do ;
var = scan ( temp , 1 , "!/\ " ) ;
temp = tranwrd ( temp , '!' || trim(var)
, sysget(trim(var)) ) ;
end ;
*-- do tilda expansion. Works for ~/ and ~user/ where user is
the current user;
if temp =: "~" & symget('sysscp') ^= 'WIN' then
do ;
var = scan ( temp , 1 , "~/\" ) ; put var=;
home = sysget('HOME'); put home=;
if var = ' '
then temp = tranwrd( temp, '~', sysget('HOME'));
else do;
userid = sysget('USER'); put userid=;
temp = tranwrd( temp, '~' || trim(userid), sysget('HOME'));
put temp=;
end;
end ;
*-- Check for a fileref;
path = pathname ( temp ) ;
if path = " " then path = temp ;
if index ( path , "(" ) then
do ;
q = trim(left(translate(path, " ", "()'\"""))) || " " || trim ( q ) ;
end ;
else
if path ^= "***" then
output ;
end ;
run ;
%mend;
1
%macro getautos(out=paths);
2
DATA &out ( keep = path ) ;
3
LENGTH q $ 32000 temp $ 300 var path $ 255 ;
4
q = getoption ( "sasautos" ) ;
5
6
*-- remove surrounding (), and internal quotes;
7
IF index ( q , "(" ) THEN
8
q = left(translate ( q , " " , "()'\"" )) ;
9
10
DO while ( 1 ) ;
11
12
temp = scan ( q || "***" , 1 , "() " ) ;
13
14
IF temp = "***"THEN leave ;
15
16
q = left(substr ( q , LENGTH ( temp ) + 1)) ;
17
18
IF temp =: "!"THEN
19
DO ;
20
var = scan ( temp , 1 , "!/\ " ) ;
21
temp = tranwrd ( temp , '!' || trim(var)
22
, sysget(trim(var)) ) ;
23
END;
24
25
*-- do tilda expansion. Works for ~/ and ~user/ where user is
Explication : Ce bloc exécute la macro `%getautos` avec ses paramètres par défaut, ce qui crée la table `work.paths`. Ensuite, `PROC PRINT` est utilisée pour afficher le contenu de cette table résultante dans la fenêtre de sortie.
Copié !
%getautos();
proc print data = paths ; run ;
1
%getautos();
2
PROC PRINTDATA = paths ; RUN ;
3 Bloc de code
DATA STEP
Explication : Cette étape `_NULL_` n'a pas pour but de créer une table SAS. Elle utilise une instruction `FILE PRINT` pour écrire des informations dans la sortie standard (ou le log). Elle récupère et affiche la valeur de la variable d'environnement `SASROOT` via `SYSGET`, puis la valeur brute de l'option `SASAUTOS`. Elle effectue ensuite quelques manipulations de chaînes (`COMPBL`, `COMPRESS`) sur la valeur de `SASAUTOS` et affiche les résultats.
Copié !
data _null_;
file print;
length sasautos $32000 sasroot $200;
sasroot = sysget('SASROOT');
put 'SASROOT:' sasroot=;
sasautos = getoption('sasautos');
put sasautos=;
sasautos = compbl(sasautos);
put sasautos=;
sasautos = compress(sasautos, '("'')');
put 'SASAUTOS:' sasautos=;
run;
1
DATA _null_;
2
file PRINT;
3
LENGTH sasautos $32000 sasroot $200;
4
sasroot = sysget('SASROOT');
5
put 'SASROOT:' sasroot=;
6
sasautos = getoption('sasautos');
7
put sasautos=;
8
sasautos = compbl(sasautos);
9
put sasautos=;
10
sasautos = compress(sasautos, '("'')');
11
put 'SASAUTOS:' sasautos=;
12
RUN;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.