Cette macro `%SQL` sert d'interface pour appeler une fonction `dsSQL` (probablement définie via PROC FCMP, comme suggéré par un commentaire). Elle permet aux développeurs d'insérer une requête SQL directement dans une instruction `SET` d'un DATA STEP. La macro prend la requête SQL en paramètre, la nettoie, la protège avec des guillemets et l'affiche dans le log. Ensuite, elle appelle la fonction `%sysfunc(dsSQL())` qui exécute la requête et renvoie un jeu de données que le DATA STEP peut lire. Cela offre une flexibilité similaire à une vue de PROC SQL, mais de manière plus dynamique et encapsulée dans une étape DATA.
Analyse des données
Type : SASHELP
Les exemples fournis avec la macro utilisent la table `sashelp.class` et les vues du dictionnaire `dictionary.macros`, qui sont des sources de données internes à SAS. La macro est conçue pour être générique et peut fonctionner avec n'importe quelle source de données accessible via une requête SQL dans l'environnement SAS.
1 Bloc de code
MACRO
Explication : Ce bloc définit la macro `%SQL`. Elle ne prend pas de paramètres nommés mais lit le buffer de paramètres (`PARMBUFF`) pour capturer la requête SQL. La variable `SYSPBUFF` est nettoyée pour enlever les parenthèses de l'appel. `UNIQUE_INDEX` est un identifiant unique généré pour chaque appel, basé sur `SYSINDEX`. L'élément central est `%sysfunc(dsSQL(&UNIQUE_INDEX, &SYSPBUFF))`, qui passe la requête SQL à la fonction `dsSQL` pour exécution. La macro est conçue pour être utilisée dans un contexte où une référence à un jeu de données est attendue, typiquement une instruction `SET`.
Copié !
%MACRO SQL() / PARMBUFF SECURE;
%let SYSPBUFF = %superq(SYSPBUFF); /* macroquoting */
%let SYSPBUFF = %substr(&SYSPBUFF, 2, %LENGTH(&SYSPBUFF) - 2); /* remove brackets */
%let SYSPBUFF = %superq(SYSPBUFF); /* macroquoting */
%let SYSPBUFF = %sysfunc(quote(&SYSPBUFF)); /* quotes */
%put NOTE:*** the query ***; /* print out the query in the log */
%put NOTE-&SYSPBUFF.;
%put NOTE-*****************;
%local UNIQUE_INDEX; /* internal variable, a unique index for views */
%let UNIQUE_INDEX = &SYSINDEX;
%sysfunc(dsSQL(&UNIQUE_INDEX, &SYSPBUFF)) /* <-- call dsSQL() function,
see the WORK.SQLinDSfcmp dataset */
%MEND SQL;
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.