Cette macro automatise le processus de 'chunking'. Elle compte d'abord le nombre total d'observations dans le jeu de données source (`dsn`). Ensuite, elle itère par blocs (taille définie par `bitesize`). À chaque itération, elle crée une table temporaire (`gwhxxxx2`), appelle deux macros externes (`%MakeList` pour formater la liste des valeurs, et `%RunQuery` pour exécuter la requête SQL) et agrège les résultats dans la table cible (`newdsn`) via `PROC APPEND`. Le script gère également un mode test pour n'exécuter qu'une seule itération.
Analyse des données
Type : EXTERNE
La macro attend un dataset en entrée via le paramètre `dsn`. Elle génère des tables temporaires (`gwhxxxx1` macro var, `gwhxxxx2`, `gwhxxxx3`) et une table finale spécifiée par `newdsn`.
1 Bloc de code
PROC SQL
Explication : Compte le nombre total d'enregistrements dans le jeu de données source pour déterminer le nombre de passes nécessaires. Arrête l'exécution si la table est vide.
Copié !
proc sql noprint;
select count(*) into :gwhxxxx1
from &dsn;
quit;
%if &gwhxxxx1=0 %then %do;
%put ====== WARNING: Input data set &dsn is empty, macro ends =======;
%goto exit;
%end;
1
PROC SQL noprint;
2
select count(*) into :gwhxxxx1
3
from &dsn;
4
QUIT;
5
6
%IF &gwhxxxx1=0 %THEN %DO;
7
%put ====== WARNING: INPUTDATASET &dsn is empty, macro ends =======;
8
%goto exit;
9
%END;
2 Bloc de code
DATA STEP Data
Explication : Boucle principale : calcule le nombre de passes, extrait un sous-ensemble de données (chunk) dans `gwhxxxx2`, et appelle les macros auxiliaires (non définies ici) `%MakeList` et `%RunQuery` pour traiter ce lot.
%put ================= Starting pass &p of &totpass ==================;
5
6
DATA gwhxxxx2;
7
SET &dsn (firstobs=&j obs=%eval(&j+&bitesize-1));
8
RUN;
9
10
%MakeList(mylist, gwhxxxx2, &column, &vtype);
11
%RunQuery(&dbname, gwhxxxx3, &query);
12
13
/* ... Logique d'accumulation ... */
14
%END;
3 Bloc de code
DATA STEP / PROC APPEND Data
Explication : Logique d'agrégation : initialise la table de sortie (`newdsn`) lors de la première itération, et ajoute les résultats (`gwhxxxx3` retourné par `%RunQuery`) lors des itérations suivantes via `PROC APPEND`.
Copié !
%if &j=1 %then %do;
data &newdsn;
set gwhxxxx3;
run;
%end;
%else %do;
Proc append base=&newdsn data=gwhxxxx3;
run;
%end;
1
%IF &j=1 %THEN %DO;
2
DATA &newdsn;
3
SET gwhxxxx3;
4
RUN;
5
%END;
6
%ELSE %DO;
7
PROC APPEND base=&newdsn DATA=gwhxxxx3;
8
RUN;
9
%END;
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 : Garth W. Helf, 2001 "Can't Relate? A Primer on Using SAS With Your Relational Database", SUGI 27 Paper 155-27
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.