Archive pour la catégorie ‘Optimisation SAS’
Limiter les étapes DATA
Dans la série optimisation et tuyaux, voici le premier d’une série de conseil pour l’optimisation de vos programme SAS.
Pour des raisons de simplification et de méconnaissance du produit SAS, nous avons tous débuté en créant une multitude d’étape data inutiles. Ces étapes sont coûteuses aussi bien en terme de CPU qu’en terme d’I/O (accès disques entrée/sorties ou Input/Output).
Quand une table est d’une grande volumétrie, essayez de ne la lire qu’une seule fois et de créer toutes les tables dépendantes en un seul passage, vous gagnerez toutes les lectures successives de cette table SAS.
/* ****************************************** */
/* Site : http://www.formations-sas.fr - 2009 */
/* */
/* Tuyaux - Performances, Optimisation SAS */
/* GAIN : CPU - IO */
/* */
/* Auteur : Pascal MAUBERT */
/* ****************************************** */
/* ACCEPTABLE */
data tablea;
set db.master;
if flag1;
run;
data tableb;
set db.master;
if flag1 and age < 21;
run;
data tablec;
set db.master;
if flag1 and age >= 21;
run;
/* PLUS EFFICACE */
data tablea tableb tablec;
set db.master;
if flag1 then do;
output tablea;
if age < 21 then output tableb;
else output tablec;
end;
run;
/* ****************************************** */
/* Site : http://www.formations-sas.fr - 2009 */
/* Auteur : Pascal MAUBERT */
/* ****************************************** */
Exemple de programme SAS SPDE (SPDS)
Avant Propos.
Le but de cet article n’est pas de se substituer à une formation appliquée de SAS SPDE, mais de présenter ce fabuleux produit, même si les techniciens SAS avancés seront surement capable de s’en contenter pour comprendre, assimiler et utiliser SAS SPDE.
Cet article ne prétends pas non plus à se substituer à la documentation officielle de SAS Institute sur SAS SPDE, un lien vers celle-ci (documentation en anglais) se trouve en bas de la page.
Description générale de SAS SPDE
SAS SPDE est un moteur de gestion de données SAS, SAS SPDS est un serveur à part entière de gestion des données et au fonctionnant proche de SAS SPDE. SAS SPDE est intégré au module SAS Base comme moteur de gestion des données .
Aujourd’hui intégré au produit / module SAS Base, son nom à été changé en SAS SPDE.
Ce moteur de données SAS offre des performances exceptionnelles et trouve sa raison d’être dans le besoin de performances accrues lors de requêtes sur des tables de très gros volumes. C’est à dire des tables allant de 512 méga à plusieurs terra octets.
En synthèse, si on souhaite pouvoir lancer une requête contenant plusieurs critères sur une table de plusieurs terra octets et obtenir une réponse en quelques secondes, alors la solution SAS SPDE est une solution appropriée.
SAS SPDE est donc l’un des procédé d’optimisation, il en existe bien d’autre, pour l’accès à des données décisionnelles, données d’entreprise, de fortes volumétrie et nécessitant des performances accrues en terme de temps de réponse à des requêtes.
Description technique de SAS SPDE
Pourquoi SAS SPDE est encore plus rapide que SAS Base, qui déjà offre des performance hors du commun ?
Changer une variable Caractère en Numérique SAS.
Ce problème est un problème très simple, il est souvent rencontré lors des développements en SAS. Les informations nécessaires sont généralement fournies lors des formations SAS AVC1 (avancé I) et bien souvent oubliées par les stagiaires.
Donc voici un rappel de la méthode « propre », du changement d’une variable de type caractère en variable de type numérique.
Utilisation pour la démonstration, d’une table SAS « COMPANY » fournie en standard dans le libname « SASHELP » : sashelp.company.
Nous allons changer ici la variable « DEPTHEAD » de type caractère et de longueur 15 en une variable de type numérique et d’une longueur de 3, sans changement du nom de la variable.
Par défaut une variable numérique en SAS fait 8 de longueur et cela n’est pas toujours nécessaire, aussi si vous avez beaucoup de variable numérique et un nombre d’observation important, il est de bon ton, pour des raisons d’optimisation, de dimensionner correctement les variables numériques.
L’instruction length permet d’effectuer cela.
Théoriquement impossible, nous allons voir que la solution est assez facile à mettre en œuvre.
/* ****************************************** */
/* Site : http://www.formations-sas.fr - 2009 */
/* SAS V9 */
/* */
/* Comment convertir une variable caractère */
/* en numérique. */
/* */
/* Procéder en trois étapes : */
/* 1 Utilisez l'option dataset RENAME */
/* 2 Utilisez la fonction de changement de */
/* type */
/* 3 Supprimez la variable intermédiaire */
/* */
/* Auteur : Pascal MAUBERT */
/* ****************************************** */
data test_change_type(drop=new_var);
set sashelp.company(rename=(DEPTHEAD=new_var));
length DEPTHEAD 3.;
DEPTHEAD=input(new_var,$15.);
run;
/* ****************************************** */
/* Site : http://www.formations-sas.fr - 2009 */
/* Auteur : Pascal MAUBERT */
/* ****************************************** */
Changer une variable Numérique en Caractère en SAS.
Ce problème est un problème très simple, il est souvent rencontré lors des développements en SAS. Les informations nécessaires sont généralement fournies lors des formations SAS AVC1 et bien souvent oublié par les stagiaires.
Donc voici un rappel de la méthode « propre », du changement d’une variable de type numérique en variable de type caractère.
Utilisation pour la démonstration, d’une table SAS « COMPANY » fournie en standard dans le libname « SASHELP » : sashelp.company.
Nous allons changer ici la variable « N » de type numérique et de longueur 8 en une variable de type caractère et d’une longueur de 12, sans changement du nom de la variable.
Théoriquement impossible, nous allons voir que la solution est assez facile à mettre en œuvre.
/* ****************************************** */
/* Site : http://www.formations-sas.fr - 2009 */
/* SAS V9 */
/* */
/* Comment convertir une variable numérique */
/* en caractère ? */
/* */
/* Procéder en trois étapes : */
/* 1 Utilisez l'option dataset RENAME */
/* 2 Utilisez la fonction de changement de */
/* type */
/* 3 Supprimez la variable intermédiaire */
/* */
/* Auteur : Pascal MAUBERT */
/* ****************************************** */
data test_change_type(drop=new_var);
set sashelp.company(rename=(n=new_var));
n=put(new_var,12.);
run;
/* ****************************************** */
/* Site : http://www.formations-sas.fr - 2009 */
/* Auteur : Pascal MAUBERT */
/* ****************************************** */
SAS Optimisation Transaction Ajout et Mise à jour
Avant propos
Cet article à pour de présenter une démarche d’optimisation pour un traitement de type Transaction pour l’ajout ou la mise à jour de données SAS.
Ce genre de problématique étant récurrent, il m’a semblé utile de vous fournir l’exemple détaillé ci-dessous.
Cet exemple se base sur des faits réels rencontrés lors d’une mission d’optimisation pour le compte du client « La Redoute », lors de mon passage au service Consulting de chez SAS Institute. Le chiffres fournis sont approximatifs et n’engage en rien la responsabilité de qui que ce soit.
Problème :
Redoute : 25 000 000 de lignes de commandes par jour et un temps de traitement sous SAS MVS avoisinant les 22 heures.
Bien sur, panique et demande d’intervention pour un audit d’optimisation.
Étude cynématique : par téléphone, par courrier et par internet réception des lignes de commande stockées dans DB2. La nuit Unload DB2 vers un fichier plat pour incorporation dans SAS. Lecture des lignes de commandes, tentative de mise à jour de la base SAS avec les lignes de commandes et en cas de rejet ajout de celles-ci dans la base SAS. Temps de traitement abominable.
Synthèse des Solutions
Deux cas se présentent :
- On connait sous DB2 la nature de la transaction « ligne de commande » ajout ou modification
- On ne la connait pas
Dans ces deux cas une solution performante existe.
La première la plus simple, ne sera pas détaillé dans cet article, simplement on transmet issu de DB2 dans l’unload une variable de type flag avec A pour ajout et M pour mise à jour. Sous SAS on éclate le fichier en deux tables SAS une pour les ajouts qui seront traités par la PROC APPEND et l’autre pour les mises à jour qui seront traités avec une étape DATA / MERGE.
Pour le deuxième cas un peu plus pointu, voici ci-dessous un exemple de programme Lire la suite de cette entrée »
Longueur utilisée d’une variable SAS : Numérique, Alphanumérique.
Dans la problématique d’optimisation des applications SAS, des traitements et de la charge machine, nous sommes parfois amené à effectuer des recherches afin d’optimiser les programmes SAS et les bases de données SAS.
Un des points important est la volumétrie que représentent ces données. En effet, lorsque des bases de données stockent de grande quantité de données, des dizaines voire des centaines de millions de lignes, il devient très rentable et judicieux de se pencher sur l’optimisation des traitements, programmes SAS, mais également sur les bases de données SAS.
Or si SAS nous fournit une gestion simplifiée de la création et de la gestion de ses tables, il n’en demeure pas moins, qu’un peu de travail d’optimisation reste à la charge du concepteur de l’architecture des données. Cela devient encore plus vrai dans le monde du décisionnel, monde dans lequel les données, stockées sous forme de data Warehouse ou de datamarts, atteignent des volumes très important et ou le temps d’analyse est conséquent.
Hormis les problématiques de bien fondé de telle ou telle variable dans une table, de la normalisation des tables qui n’est pas Lire la suite de cette entrée »
