Publié le :
Macro EXTERNE

Macro SAS pour la récupération de version de table (`AHGtabver`)

Ce code est également disponible en : Deutsch English Español
Attention : Ce code nécessite des droits administrateur.
La macro `AHGtabver` est conçue pour être exécutée dans un environnement SAS© distribué, utilisant `rsubmit` pour soumettre du code à un serveur SAS© distant. Elle prend en entrée un numéro d'identifiant de table (`ltabno`) et le nom d'une macro-variable de sortie (`outver`).
À l'intérieur du bloc `rsubmit`, un `DATA _NULL_` pas à pas est utilisé. Il définit un `filename pip pipe` pour exécuter une commande shell spécifique : `cd &root3; tabver &rtabno`. Cette commande navigue vers un répertoire spécifié par `&root3;` puis exécute un programme externe `tabver` avec le numéro de table. L'output de cette commande externe est capturé par le pipe.
Le `DATA _NULL_` lit la première ligne de l'output du pipe et utilise `call symput` pour stocker cette ligne dans une macro-variable temporaire `rtabver` sur le serveur distant. Enfin, `%%sysrput &outver=&rtabver;` est utilisé pour renvoyer la valeur de `rtabver` à la session SAS© locale, en l'assignant à la macro-variable dont le nom a été passé dans le paramètre `outver`.
Ce mécanisme permet de lier des informations de version du système d'exploitation ou d'un gestionnaire de versions à l'intérieur d'un programme SAS©.
Analyse des données

Type : EXTERNE


Les données traitées par cette macro ne proviennent pas de jeux de données SAS traditionnels (qu'ils soient SASHELP, internes ou externes au script). Elles sont extraites de l'output textuel d'une commande système externe (`tabver`) exécutée via un pipe UNIX. Le résultat est une information textuelle (un numéro de version) stockée dans une macro-variable.

1 Bloc de code
MACRO DEFINITION
Explication :
Ce bloc définit la macro `AHGtabver` qui encapsule la logique de récupération de version. Il utilise `%syslput` pour transférer les paramètres de la session locale vers la session distante avant le `rsubmit`. Le code entre `rsubmit;` et `endrsubmit;` est exécuté sur le serveur distant. Après l'exécution du `DATA _NULL_` sur le serveur distant, `%%sysrput` renvoie la valeur de la macro-variable `rtabver` (créée sur le distant) à la session locale, l'assignant à la macro-variable dont le nom est fourni par `&outver`.
Copié !
1%macro AHGtabver(ltabno,outver);
2 %syslput rtabno=<abno;
3 %syslput outver=&outver;
4 
5rsubmit;
6 
7 DATA _null_;
8 filename pip pipe "cd &root3; tabver &rtabno";
9 INFILE pip;
10 LENGTH line $100;
11 INPUT line;
12 call symput('rtabver',line);
13 RUN;
14 %nrstr(%%)sysrput &outver=&rtabver;
15endrsubmit;
16 
17%mend;
2 Bloc de code
DATA STEP
Explication :
Ce `DATA _NULL_` est exécuté sur le serveur distant (à l'intérieur du bloc `rsubmit`). Il ne crée pas de jeu de données permanent. Il est utilisé pour:
1. Définir un `filename` appelé `pip` comme un pipe (`pipe`) qui exécutera la commande shell `cd &root3; tabver &rtabno`.
2. Utiliser `infile pip` pour lire l'output de cette commande externe.
3. Lire la première ligne de l'output dans la variable `line`.
4. Utiliser `call symput('rtabver',line);` pour créer une macro-variable nommée `rtabver` (sur le serveur distant) et lui assigner le contenu de `line`. Cette macro-variable contiendra le numéro de version retourné par la commande système `tabver`.
Copié !
1 DATA _null_;
2 filename pip pipe "cd &root3; tabver &rtabno";
3 INFILE pip;
4 LENGTH line $100;
5 INPUT line;
6 call symput('rtabver',line);
7 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.
Informations de Copyright : En-têtes RCS détectés: $Source: /Volumes/app/cdars/prod/prjA258/phase3b4/A2581172/saseng/pds1_0/program/RCS/fmd_site_chg.sasdrvr,v $, $Revision: 1.14 $, $Author: Hui Liu $, $Locker: $, $State: Exp $