Publié le :
Macro EXTERNE

Macro utilitaire pour tronquer une table SAS

Ce code est également disponible en : Deutsch English Español
Cette macro, nommée DI_UTIL_TRUNCATE_TABLE, permet de vider une table de toutes ses données sans la supprimer. Elle utilise une méthode en deux temps : d'abord, elle exporte la structure de la table (mais aucune donnée grâce à l'option OBS=0) dans un fichier de transport temporaire via PROC CPORT. Ensuite, elle réimporte cette structure à partir du fichier temporaire avec PROC CIMPORT, ce qui a pour effet d'écraser la table existante par une table vide. Les index et contraintes sont préservés. La macro sauvegarde et restaure également les options système OBS et NOTES pour ne pas affecter l'environnement de l'utilisateur.
Analyse des données

Type : EXTERNE


La macro opère sur une table SAS existante dont le nom est fourni en paramètre. Aucune donnée n'est créée ou lue depuis SASHELP.

1 Bloc de code
MACRO
Explication :
Ce bloc définit la macro `DI_UTIL_TRUNCATE_TABLE`. Elle prend un nom de table en paramètre. L'exécution commence par sauvegarder les options globales `obs` et `notes`. Ensuite, elle positionne `obs=0` pour ne lire aucune observation et utilise `PROC CPORT` pour exporter uniquement la structure de la table d'entrée dans un fichier temporaire. Si cette étape réussit (`syserr=0`), `PROC CIMPORT` est appelée pour réimporter la structure depuis le fichier temporaire dans la même table, ce qui a pour effet de la vider. Finalement, les options `obs` et `notes` initiales sont restaurées. Un label `EXIT` est utilisé pour s'assurer que les options sont restaurées même en cas d'erreur.
Copié !
1%macro DI_UTIL_TRUNCATE_TABLE( TABLE ) ;
2 
3 *------save caller environment------;
4 %local callerobs;
5 %let callerobs = %sysfunc(getoption(obs));
6 %local callernotes;
7 %let callernotes = %sysfunc(getoption(notes));
8 
9 
10 *------cport zero obs of the table silently to capture table definition------;
11 options obs=0 nonotes;
12 filename tranfile temp;
13 PROC CPORT file=tranfile DATA=&TABLE; RUN;
14 %IF &syserr ne 0 %THEN %goto EXIT;
15 
16 
17 *------cimport the empty table definition------;
18 PROC CIMPORT INFILE=tranfile DATA=&TABLE extendsn=no; RUN;
19 %IF &syserr ne 0 %THEN %goto EXIT;
20 options obs=&callerobs &callernotes;
21 %put NOTE: %qupcase(&TABLE) has been truncated.;
22 
23 
24%EXIT:
25 options obs=&callerobs &callernotes;
26 
27%mend DI_UTIL_TRUNCATE_TABLE;
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 : Copyright (C) 2016 SAS Institute, Inc. All rights reserved.