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

Débutez Discussion :

Créer un array à partir d'une table


Sujet :

Débutez

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 36
    Points : 42
    Points
    42
    Par défaut Créer un array à partir d'une table
    Bonjour,

    J'ai la table suivante :

    ANNEE DELAI Montants
    2008 0 150
    2008 1 130
    2008 2 102
    2009 1 32
    2009 3 17
    ...

    J'aimerais tranformer cette table en array pour pouvoir par la suite faire des opérations dessus. L'array doit se présenter de la façon suivante :

    0 1 2 3 ...
    2008 150 130 102 . ...
    2009 . 32 . 17 ...
    ...


    Je ne vois pas du tout comment m'y prendre dans une étape DATA.

  2. #2
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 36
    Points : 42
    Points
    42
    Par défaut
    je viens de me rendre compte à l'affichage que tout a été décalé. SI ce n'est pas clair, je pourrais réexpliquer.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Attaché statisticien
    Inscrit en
    Mai 2011
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Attaché statisticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2011
    Messages : 687
    Points : 1 581
    Points
    1 581
    Par défaut
    Bonjour,

    Ce n'est effectivement pas très clair, tu veux un array mais ces objets n'existent pas en tant que tel en SAS, ils existent seulement dans les DATA.

    Si tu veux transformer une table dans la première structure dans une autre table correspondant à la deuxième structure (qui sera une structure de table et non d'array) alors je te propose ceci

    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
     
    DATA table;
    INFILE datalines TRUNCOVER DLM=' ';
    INPUT ANNEE :8. DELAI :8. Montants :8.;
    DATALINES;
    2008 0 150
    2008 1 130
    2008 2 102
    2009 1 32
    2009 3 17
    ;
    run;
    PROC PRINT DATA=Table;
     
    PROC TRANSPOSE DATA=table OUT=table ;
    BY annee;
    VAR Montants;
    ID delai;
    RUN;
     
    PROC PRINT DATA=table;RUN;
     
                                    Obs    ANNEE    DELAI    Montants
     
                                     1      2008      0         150
                                     2      2008      1         130
                                     3      2008      2         102
                                     4      2009      1          32
                                     5      2009      3          17
     
     
                           Obs    ANNEE     _NAME_      _0     _1     _2    _3
     
                            1      2008    Montants    150    130    102     .
                            2      2009    Montants      .     32      .    17

  4. #4
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 36
    Points : 42
    Points
    42
    Par défaut
    Merci c'est exactement ce dont j'ai besoin. Mais je voulais faire un array car après je peux utiliser la structure "comme une matrice" dans mon étape DATA (je n'ai pas IML).

    Est-il possible dans une étape DATA d'importer la table qu'on vient de transposer dans un array ?

    Je crois qu'il faut écrire un code comme :

    DATA Table2;
    Set TableTranposé;
    Array Matrice(annee1:annee10;delai1:delai10);
    Matrice(annee,delai) = Montant;

    /* calculs */

    RUN;

  5. #5
    Membre expérimenté
    Homme Profil pro
    Attaché statisticien
    Inscrit en
    Mai 2011
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Attaché statisticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2011
    Messages : 687
    Points : 1 581
    Points
    1 581
    Par défaut
    Je ne sais pas, ça risque de ne pas être pratique, le mieux serait que tu utilise une table de hashage à partir de ta première table

    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
    DATA MATRICE;
    INFILE datalines TRUNCOVER DLM=' ';
    INPUT ANNEE :8. DELAI :8. Montants :8.;
    DATALINES;
    2008 0 150
    2008 1 130
    2008 2 102
    2009 1 32
    2009 3 17
    ;
    run;
    data Table_de_travail;var="work";run;
    DATA Table_de_travail;
    SET Table_de_travail;
    LENGTH ANNEE 8. DELAI 8. Montants 8. ;
    IF _n_=1 THEN 
    DO;
          declare Hash Matrice(dataset:"MATRICE");
          Matrice.DefineKey("ANNEE","DELAI");
          Matrice.DefineData("ANNEE","DELAI","MONTANTS");
          Matrice.DefineDone();
    END ;
     
    ANNEE=2008;DELAI=2;
    RC=Matrice.find();
    IF RC=0 THEN DO;PUT ANNEE= DELAI= Montants=;END; ELSE PUT ANNEE= DELAI= "aucune donnée";
     
    ANNEE=2009;DELAI=3;
    RC=Matrice.find();
    IF RC=0 THEN DO;PUT ANNEE= DELAI= Montants=;END; ELSE PUT ANNEE= DELAI= "aucune donnée";
     
     
    ANNEE=2015;DELAI=99;
    RC=Matrice.find();
    IF RC=0 THEN DO;PUT ANNEE= DELAI= Montants=;END; ELSE PUT ANNEE= DELAI= "aucune donnée";
     
    RUN;

Discussions similaires

  1. [Artichow] Comment créer un graphe à partir d'une table mysql avec deux colonnes
    Par Amel_B dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 24/12/2013, 15h50
  2. [EG] Créer un format à partir d'une table
    Par laeticiagooding dans le forum Outils BI
    Réponses: 5
    Dernier message: 24/11/2013, 22h06
  3. Réponses: 1
    Dernier message: 17/04/2013, 20h00
  4. créer un tableau à partir d'une table de hachage
    Par étoile de mer dans le forum Débuter
    Réponses: 96
    Dernier message: 03/11/2009, 22h57
  5. [MySQL] Remplir un array à partir d'une table
    Par Dauphin dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 26/06/2007, 07h25

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