IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SAS Base Discussion :

Gérer au mieux les formats pour des données issues de BDD SQL


Sujet :

SAS Base

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Statisticien
    Inscrit en
    Avril 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Statisticien
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Gérer au mieux les formats pour des données issues de BDD SQL
    Bonjour,

    Je consulte assez classiquement des données d'une base de données SQL PostGre, et je rencontre quelques petites difficultés avec les formats.
    Rien d'insoluble, mais je cherche la solution la plus rapide et la plus automatique pour gérer le problème.

    Dans les bases lues, les variables caractère sont de type character varying(255).
    Par défaut, lors de la lecture (création d'une table sas par une proc SQL), Sas attribue à ces variables un format $510.
    Ce qui est vraiment très gourmand de sa part...

    Je cherche donc la méthode la plus efficace possible pour pourvoir travailler ensuite sur ces tables sans difficulté. (plusieurs millions de lignes donc table trop lourde sans ce reformatage).

    Ce que j'ai déjà testé :

    1. L'idéal serait que SAS reconnaisse automatiquement le caractère varying, y a-t-il une option pour cela ?

    2. En attendant, j'ai testé plusieurs choses :
    - forcer le format $varying255. lors de la proc sql. Afin de m'épargner l'écriture en extension de la liste des variables, je lis les informations des dictionnaires de la BDD.
    C'est inefficace sur la taille finale de la table
    - forcer le format réel des variables lors de la proc sql. Cela nécessite premièrement de lire la donnée pour connaître sa longueur maximale réelle, donc lourd...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    proc SQL noprint ;
    select max(length(ma_variable))
    into: max_length
    from ma_table;
    quit ;
    Une écriture comme suit est également inefficace pour réduire la taille de la table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    proc sql;
    create table ma_table as select ma_variable FORMAT = $3. INFORMAT = $3. 
    from ma_base.ma_table_source 
    ;
    quit;
    3. La proc datasets semble également sans effet (mais je n'ai pas testé ce qui se passe si j'enchaîne une étape datasets ET une étape data réelle pour réécrire l'ensemble des données

    4. J'ai finalement opté pour la création d'une nouvelle table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    data ma_table_v2;
    format ma_variable $3.;
    set ma_table;
    run;
    Cette procédure fonctionne et diminue considérablement la volumétrie.

    Quelques questions plus précises :

    Q1. Pourquoi l'étape datasets est-elle inefficace ? La réécriture par une étape data me permettrait -elle d'atteindre le mm objectif ?

    Q2. Pourquoi le formatage lors de la lecture SQL est-il inefficace ? Aurai-je dû créé premièrement une table vide en SAS avec les bons formats ?

    Q3. Quelle est la meilleure façon de calculer la longueur maximum réelle des variables concernées ?

    Merci par avance pour vos éclaircissements

  2. #2
    Membre actif
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2013
    Messages : 37
    Points : 206
    Points
    206
    Par défaut re.Gérer au mieux les formats pour des données issues de BDD SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    %macro passth ;
    PROC SQL;
    CONNECT TO ODBC AS connect
      (NOPROMPT="UID=;PSW=;DSN=;SERVER=;DATABASE="  dbmax_text=32767);
    	Create table table sortie as
    		Select * 
    			from connection to connect (
    										Select  * 
    											From nom_table );
    quit;
    %mend;
    l'option qu'il faut utiliser est DBMAX_TEXT = (nombre supérieur au égal à ce que vous voulez avoir

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Statisticien
    Inscrit en
    Avril 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Statisticien
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour, et merci pour votre réponse, qui malheureusement ne marche pas totalement....

    Il y a dans la table des variables plus longues encore, et la "réduction" du format ne s'applique qu'à celle-ci

    Il y a plusieurs variables en varying 255, et une en varying 2000, seule cette dernière bénéfice de l'option.

Discussions similaires

  1. utf8 pour des données issues d'une bdd
    Par laurentSc dans le forum Langage
    Réponses: 12
    Dernier message: 25/08/2013, 21h46
  2. Comment gérer au mieux les accès aux données MySQL
    Par akaii dans le forum Accès aux données
    Réponses: 10
    Dernier message: 15/07/2010, 06h49
  3. Réponses: 10
    Dernier message: 02/04/2007, 17h22
  4. Réponses: 1
    Dernier message: 24/10/2006, 00h24
  5. Problème de format pour des chiffres à virgule
    Par bob75000 dans le forum Access
    Réponses: 5
    Dernier message: 21/07/2006, 10h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo