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

Macro Discussion :

problème extraction de données un fichier sas


Sujet :

Macro

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut problème extraction de données un fichier sas
    Bonjour à tous,

    Je travaille sur une base oracle que j'essaye d'exporter vers SAS et je cherche à automatiser par une macro l'attribution des formats et labels
    des tables dans un fichier SAS. Pour cela j'ai procédé de la manière suivante:

    Tout d'abord, j'ai créé une table générale dans la work dans laquelle sont regroupées toutes mes tables.

    Puis une tentative de création de macro pour classer mes tables dans un fichier sous forme de data SAS avec leurs attributs, format et labels.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    /* CONNECTION A LA BASE DE L'ETUDE */
     
    libname xx oracle user=xzz password=xxxxxx path="123456";
     
    /* PROCEDURE DE STRUCTURATION DES TABLES SAS RELATIVES A L'ETUDE */
     
     
    data tables;
    set dm.Vsas_Tab_Cols_Order ( keep = id_etu table_name column_name
    data_type data_length label id_the );
    where ((id_etu = 2) and ( column_name ne ' ' ) and ((substr (column_name,1,3)) ne "NUM"));
    			attrib column_name label="Variable";
    			attrib label label="Label";
    			attrib data_type label="Type"; 
    			attrib data_length label="Length";  
    			attrib id_the label="Thesaurus";  
    			attrib table_name label="Table";
    run;
    proc sort data=tables;
    by table_name column_name;
    run;
     
    data tables2;
    set tables (keep = table_name column_name label data_type id_the);
    if id_the ne ' ' then data_type=ide_the;
    if id_the eq ' ' then data_type=data_type;
    run;
     
    /* MACRO DE CREATION D'ETAPE DATA */
     
    %macro attrib (table);
    file "D:\DATA xxxxxxxxx\attrib.sas";
    set tables;
    if first.Table then do;
    if _N_= 1 then put "data &table librairy = librairy"; 
    put / @1  "attrib " variable " " @2 label "='" label "'";
    else put / @15  "format= " lenght; end;
    else if last.Table then put @15 label "='" label "'";
    else put / @15  "format= " lenght; end;		
    run;
    %mend;
     /* TEST DE LA MACRO */
     
    %attrib (DEMO);
    Je sèche sur la macro et toute aide ou critique me serait utile.
    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Bonjour.
    Quelques remarques et pistes pour ton programme :
    • quel est l'intérêt d'encapsuler la fin du programme dans une macro ? Le seul paramètre TABLE pourrait être géré par une macro-variable (%LET) sans peine
    • dans ta macro, tu as un FILE et un PUT, mais pas de début d'étape DATA
    • dans l'étape Data que tu rédiges avec tes PUT, il y a pas mal de fautes de syntaxe (DATA demo LIBRARY=library par exemple) et pas d'instruction SET
    • l'alternative usuelle à ce que tu veux faire (un programme SAS écrit avec une étape Data dans un fichier externe, puis relu avec %INCLUDE) est d'utiliser CALL EXECUTE ; c'est une instruction discutée dans quelques posts sur ce forum
    • si tu as déjà une copie de ta table Oracle en SAS, tu peux plutôt générer une proc Datasets pour changer les labels et les formats des variables, ce sera plus rapide d'exécution (pas de relecture de chaque observation de la table)
    • le plus simple à mes yeux serait de procéder avec la méthodo suivante :

    1. écrire en dur le code pour changer les labels de 2 ou 3 variables dans une de tes tables
    2. faire écrire le même code à une étape Data (avec FILE/PUT ou CALL EXECUTE)
    3. vérifier que le code généré est bien le même
    4. compliquer en gérant aussi les formats
    5. vérifier encore que tout colle bien (code généré = code écrit en dur)
    6. essayer sur une autre table ou d'autres variables pour la portabilité
    7. lancer en vraie grandeur

    Bon courage.
    Olivier

Discussions similaires

  1. Tri et Extraction de données depuis fichier
    Par benjaminnice dans le forum C++
    Réponses: 7
    Dernier message: 31/01/2014, 11h45
  2. Extraction de données depuis fichier SIG
    Par villegente dans le forum SIG : Système d'information Géographique
    Réponses: 2
    Dernier message: 28/11/2013, 21h49
  3. extraction des données de fichier txt dans un tableau?
    Par lina_21 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 18/03/2010, 11h47
  4. extraction des données du fichier txt
    Par micha1 dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 14/01/2010, 14h28
  5. Extraction de données depuis fichier .NDX ...
    Par Olif_C dans le forum WinDev
    Réponses: 4
    Dernier message: 30/08/2005, 11h57

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