Publié le :
Macro SASHELP

Macro pour obtenir les métadonnées d'une table SAS

Cette macro prend en entrée une bibliothèque (lib) et un nom de table (dsn). Elle utilise la vue `sashelp.vtable` pour rechercher les informations correspondantes. En utilisant les fonctions `%sysfunc(open)`, `%sysfunc(fetchobs)` et `%sysfunc(close)`, elle lit l'enregistrement de métadonnées de la table et assigne les valeurs (telles que le nombre d'observations, le nombre de variables, la date de création, etc.) à une série de variables macro globales prédéfinies (ex: `_nobs`, `_nvar`, `_crdate`). Les valeurs récupérées sont également affichées dans le journal SAS© à des fins de débogage.
Analyse des données

Type : SASHELP


La macro interroge la vue système `sashelp.vtable` pour obtenir les métadonnées de la table demandée par l'utilisateur. Elle ne crée pas de données et ne lit pas de fichiers externes directement.

1 Bloc de code
Macro
Explication :
Ce bloc définit la macro `%utl_getTable`. Il déclare des variables macro locales et globales. La partie centrale ouvre la table `sashelp.vtable`, y recherche la table spécifiée via les paramètres `lib` et `dsn`, récupère la première (et unique) observation correspondante, puis ferme la table. Les valeurs des colonnes de `vtable` sont ensuite assignées aux variables macro globales correspondantes à l'aide de `%let` et `%qtrim` pour supprimer les espaces superflus. Finalement, des instructions `%put` affichent les valeurs des variables globales dans le journal pour vérification.
Copié !
1%macro utl_getTable(lib,dsn)
2 /des="get table attributes meta data";
3/*--- OUTPUT MACRO VARIABLES
4 _LIBNAME
5 _MEMNAME
6 _MEMTYPE
7 _MEMLABEL
8 _TYPEMEM
9 _CRDATE
10 _MODATE
11 _NOBS
12 _OBSLEN
13 _NVAR
14 _FILESIZE
15 _DELOBS
16 _NLOBS
17 _NUM_CHARACTER
18 _NUM_NUMERIC
19---*/
20 /*--- for testing withou macro
21 %let lib=sashelp;
22 %let dsn=class;
23 ---*/
24 %global
25 _libname
26 _memname
27 _memtype
28 _memlabel
29 _typemem
30 _crdate
31 _modate
32 _nobs
33 _obslen
34 _nvar
35 _filesize
36 _delobs
37 _nlobs
38 _num_character
39 _num_numeric ;
40 %local
41 LIBNAME
42 memname
43 memtype
44 memlabel
45 typemem
46 crdate
47 modate
48 nobs
49 obslen
50 nvar
51 filesize
52 delobs
53 nlobs
54 num_character
55 num_numeric ;
56 
57 %let dsid=%sysfunc(open(sashelp.vtable
58 (where=(
59 upcase("&lib") = upcase(LIBNAME)
60 and upcase("&dsn") = memname)),i));
61 
62 %syscall SET(dsid);
63 
64 %let rc=%sysfunc(fetchobs(&dsid,1));
65 %let rc=%sysfunc(close(&dsid));
66 
67 %let _libname = %qtrim(&LIBNAME );
68 %let _memname = %qtrim(&memname );
69 %let _memtype = %qtrim(&memtype );
70 %let _memlabel = %qtrim(&memlabel );
71 %let _typemem = %qtrim(&typemem );
72 %let _crdate = %qtrim(&crdate );
73 %let _modate = %qtrim(&modate );
74 %let _nobs = %qtrim(&nobs );
75 %let _obslen = %qtrim(&obslen );
76 %let _nvar = %qtrim(&nvar );
77 %let _filesize = %qtrim(&filesize );
78 %let _delobs = %qtrim(&delobs );
79 %let _nlobs = %qtrim(&nlobs );
80 %let _num_character = %qtrim(&num_character);
81 %let _num_numeric = %qtrim(&num_numeric );
82 
83 %put ---- inside &=_libname ;
84 %put ---- inside &=_memname ;
85 %put ---- inside &=_memtype ;
86 %put ---- inside &=_memlabel ;
87 %put ---- inside &=_typemem ;
88 %put ---- inside &=_crdate ;
89 %put ---- inside &=_modate ;
90 %put ---- inside &=_nobs ;
91 %put ---- inside &=_obslen ;
92 %put ---- inside &=_nvar ;
93 %put ---- inside &=_filesize ;
94 %put ---- inside &=_delobs ;
95 %put ---- inside &=_nlobs ;
96 %put ---- inside &=_num_character;
97 %put ---- inside &=_num_numeric ;
98%mend utl_getTable;
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.