Publié le :
Macro AUCUNE

Macro SAS pour la capture et l'affichage d'une section du log

Ce code est également disponible en : Deutsch English Español
Attention : Ce code nécessite des droits administrateur.
La macro `%cliplog` est conçue pour extraire une portion du log SAS©. Elle prend `marker1` et `marker2` comme composants du marqueur de début, `pos` (par défaut 'last') pour la direction de recherche, et `file` (par défaut 'c:\test.txt') pour le chemin du fichier de sortie. Elle désactive temporairement l'option `mprint` de SAS© pour éviter que ses propres commandes ne soient imprimées dans le log. Via l'interface Display Manager (commande `dm`), la macro localise le marqueur combiné (`&marker1&marker2`) dans le log (recherche en arrière si `pos=last`), marque cette position, se déplace à la fin du log et y place une seconde marque. Le texte entre ces deux marques (du marqueur trouvé jusqu'à la fin du log) est ensuite copié dans le presse-papiers SAS©, puis collé dans le fichier spécifié. Enfin, la commande `x` est utilisée pour ouvrir le fichier texte résultant avec l'application Notepad. L'option `mprint` est restaurée à la fin de l'exécution de la macro.
Analyse des données

Type : AUCUNE


Le script ne lit ni ne crée de jeux de données SAS conventionnels. Il interagit directement avec le log SAS pour en extraire du texte et l'écrire dans un fichier externe au format texte.

1 Bloc de code
MACRO DÉFINITION
Explication :
Ce bloc définit la macro `%cliplog`. Elle est conçue pour capturer une section du log SAS en utilisant les commandes Display Manager (`dm`). La macro désactive temporairement l'option `mprint` pour éviter l'inclusion de ses propres instructions dans le log capturé. Elle localise une chaîne (`marker1` concaténé avec `marker2`), marque cette position, puis marque la fin du log. Le contenu entre ces deux points est copié dans le presse-papiers SAS, puis écrit dans le fichier spécifié par le paramètre `file`. Enfin, la commande `x "notepad &file"` est utilisée pour ouvrir le fichier généré dans Notepad, et l'option `mprint` est restaurée.
Copié !
1%macro cliplog(marker1,marker2,pos=last,file=c:\test.txt) ;
2 * note: split search text in half so we dont go and find it in our macro call ;
3 * note: save mprint option since we want mprint turned off for the macro RUN, otherwise
4 we get our search text written to the log and we will find it ;
5 %let o=%sysfunc(getoption(mprint)) ;
6 options nomprint ;
7/* log;
8 find '&marker1&marker2' &pos;
9 rfind;
10 mark;
11 bottom;
12 mark;
13 store;
14 unmark;
15 notepad;
16 clear;
17 paste;
18 file '&file';
19 end
20*/
21 dm "log;find '&marker1&marker2' &pos;mark;bottom;mark;store;unmark;notepad;clear;paste;file '&file';end" ;
22 * view the file in windows notepad ;
23 x "notepad &file" ;
24 options &o ;
25%mend cliplog ;
2 Bloc de code
EXEMPLE D'UTILISATION
Explication :
Ce bloc illustre l'utilisation de la macro `%cliplog`. La ligne `***BEGIN***;` est une instruction SAS qui écrit un marqueur dans le log. Le commentaire `/* now run all the SAS code you would like to capture */` indique où insérer le code dont on veut capturer le log. L'appel `%cliplog(***BEGIN,***);` exécute la macro pour capturer le log. La macro recherchera la première occurrence de `***BEGIN***` (en recherchant à rebours si `pos=last`), marquera cette position, puis la fin du log, et copiera le texte entre ces deux points.
Copié !
1***BEGIN***;
2/* this marks where to start the copying from the log */
3/* now
4run all the SAS code you would like to capture */
5%cliplog(***BEGIN,***) ;
6/* finally we call the macro which captures the log from the point we previously marked */
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.