sas
Résoudre les variables de macro entre guillemets dans les traversées PROC SQL
Recherche…
Introduction
L'un des défis auxquels j'ai été confronté lorsque j'ai commencé à utiliser SAS consistait non seulement à transmettre des données de variables de macro dans un transfert SQL PROC, mais à les résoudre correctement si des citations étaient nécessaires. Lors de la transmission d'une chaîne comme value ou date / datetime dans un pass SQL direct, il est probable que des guillemets simples soient présents lors de la résolution.
J'ai trouvé les meilleurs résultats en utilisant la fonction% BQUOTE pour y parvenir.
Remarques
Plus d'informations sur la fonction% BQUOTE peuvent être trouvées ici: https://v8doc.sas.com/sashtml/macro/z4bquote.htm
Pass-through avec macro variable qui est une date
Tout d'abord, je placerai ma date dans une variable macro.
NOTE: Je trouve cette date9. fonctionne parfaitement avec IBM® Netezza® SQL et Transact-SQL. Utilisez le format qui fonctionne pour le type de SQL que vous exécutez.
data _null_;
call symput('testDate',COMPRESS(put(today(),date9.)));
;RUN;
%PUT &testDate;
Mon énoncé% PUT est résolu comme suit: 10MAR2017
Ensuite, je veux exécuter un passage SQL PROC et résoudre cette variable de macro pour spécifier une date.
PROC SQL;
CONNECT TO odbc AS alias (dsn=myServer user=userName password= pass);
CREATE TABLE TableName AS
SELECT *
FROM connection to alias
(
SELECT *
FROM
Database.schema.MyTable
WHERE
DateColumn = %bquote('&testDate')
);
QUIT;
% bquote ('& testDate') se résoudra à '10MAR2017' lorsque le code sera exécuté.