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 :

Récupérer informations individus sur une ligne : initilament informations sur plusieurs lignes [PROC]


Sujet :

SAS Base

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 17
    Points : 9
    Points
    9
    Par défaut Récupérer informations individus sur une ligne : initilament informations sur plusieurs lignes
    Bonjour,
    j'au un problème, je veux regrouper toutes les infos concernant un même individu sur une même ligne.
    On a :
    - ident=l'identifiant de l'individu
    - numper=le numéro de la période (jusqu'à 20 périodes)
    - ga2_adeb=l'année de début
    - ga2_afin= l'année de fin
    - ga2_aged=l'âge
    Je veux obtenir ga2_adeb_1 ga2_afin_1 ga2_aged_1 pour la première période,
    ga2_adeb_2 ga2_afin_2 ga2_aged_2 pour la 2° période,
    ga2_adeb_3 ga2_afin_3 ga2_aged_3 pour la 3° période,....

    Comment faire ?

    J'avais pensé à 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
    proc sort data=r out=a; 
    by ident numper;
    run;
    data b; set a;
    by ident;
    array ga2_adeb_(20) ga2_adeb_1-ga2_adeb_20;
    array ga2_afin_(20) ga2_afin_1-ga2_afin_20;
    array ga2_aged_(20) ga2_aged_1-ga2_aged_20;
    retain ga2_adeb_1-ga2_adeb_20 ga2_afin_1-ga2_afin_20 ga2_aged_1-ga2_aged_20;
    if first.ident then do;
    do i=1 to 20;
    ga2_adeb_(i)=ga2_adeb;
    ga2_afin_(i)=ga2_afin;
    ga2_aged_(i)=ga2_aged;
    end;
    end;
    if last.ident then output;
    run;
    Mais ça ne marche pas bien sûr...

    Qui saurait comment faire ??

  2. #2
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    Tu aurais un exemple avec des données??

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Oui, voilà un exemple de mes données :

    ident numper Ga2_AgeD Ga2_Adeb Ga2_Afin
    7 1 16 1987 1990
    7 2 19 1990 1991
    7 3 20 1991 2008
    16 1 16 1953 1959
    16 2 21 1959 1997
    16 3 59 1997 2008
    17 1 16 1971 1972
    17 2 17 1972 1977
    17 3 22 1977 2008
    20 1 16 1984 1985
    20 2 16 1985 2008

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 747
    Points : 978
    Points
    978
    Par défaut
    salut,

    et après tu veux faire kwa?

    tcho

  5. #5
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    L'idée c'est d'avoir une ligne par individu, exemple :


    ident ; Ga2_AgeD_1 ; Ga2_AgeD_2 ; Ga2_AgeD_3 ; Ga2_Adeb_1 ; Ga2_Adeb_2
    7 ; 16 ; 19 ; 20 ; 1987 ; 1990
    16 ; 16 ; 21 ; 59 ; 1953 ; 1959

    (les ; indiquent la séparation entre les colonnes)

  6. #6
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    Tu ne gardes que les premières lignes pour les variables Ga2_Adeb Ga2_Afin?

  7. #7
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Dans les données de départ, on a plusieurs lignes pour un même individu (ayant un seul et même identifiant). Chaque ligne correspond par exemple à un contrat de travail.
    Numpar représente le numéro de contrat : 1° contrat, 2° contrat... 20 maximum.
    A chaque ligne, c'est-à-dire à chaque contrat, on demande :
    - l'année de début du contrat GA2_ADEB
    - et l'année de fin du contrat GA2_AFIN

    Mon but c'est d'obtenir une seule ligne par individu, avec les informations de tous les contrats.
    Je veux obtenir GA2_ADEB1 pour la date de début du premier contrat, GA2_ADEB2 pour la date de début du 2° contrat... autant de variables GA2_ADEB que de contrats.
    Mais aussi, dans la même ligne, pour ce même individu, autant de variables GA2_AFIN que de contrats, etc.

  8. #8
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    235
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 235
    Points : 372
    Points
    372
    Par défaut
    Bonjour,
    voici une solution mettant en oeuvre le DOW loop (plus rapide à écrire que la solution par retain).

    Le DOW Loop est abordé dans de nombreux SUGI.




    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
     
    data lignes;
    input ident numper Ga2_AgeD Ga2_Adeb Ga2_Afin;
    cards;
    7 1 16 1987 1990
    7 2 19 1990 1991
    7 3 20 1991 2008
    16 1 16 1953 1959
    16 2 21 1959 1997
    16 3 59 1997 2008
    17 1 16 1971 1972
    17 2 17 1972 1977
    17 3 22 1977 2008
    20 1 16 1984 1985
    20 2 16 1985 2008
    ;
    run;
     
    %let max_contrat=3;
     
    data une_ligne;
    do until (last.ident);
    	set lignes;
    	by ident;
    	array Ga2_AgeD_(&max_contrat.) ;
    	array Ga2_Adeb_(&max_contrat.) ;
    	array Ga2_Afin_(&max_contrat.) ;
     
    	Ga2_AgeD_(numper) = Ga2_AgeD;
    	Ga2_Adeb_(numper) = Ga2_Adeb;
    	Ga2_Afin_(numper) = Ga2_Afin;
     
    end;
    drop Ga2_AgeD Ga2_Adeb Ga2_Afin  ;
     
    run;

  9. #9
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    En partant du code de sasadm, une solution plus dunamique et plus optimisée:

    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
    DATA lignes;
    input ident numper Ga2_AgeD Ga2_Adeb Ga2_Afin;
    cards;
    7 1 16 1987 1990
    7 2 19 1990 1991 
    7 3 20 1991 2008
    7 4 26 1998 2009
    16 1 16 1953 1959
    16 2 21 1959 1997
    16 3 59 1997 2008
    17 1 16 1971 1972
    17 2 17 1972 1977
    17 3 22 1977 2008
    20 1 16 1984 1985
    20 2 16 1985 2008
    ;
    run;
     
    proc sql;
    	select max(maxid) into :max_contrat
    	from
    		(select count (distinct NUMPER) as maxid
    	  	from LIGNES
    		group by IDENT);
    quit;
     
    DATA une_ligne;	
    	array Ga2_AgeD_(&max_contrat.) ;
    	array Ga2_Adeb_(&max_contrat.) ;
    	array Ga2_Afin_(&max_contrat.) ;
    do until (last.ident); 
    	SET lignes;
     
    	BY ident;
    	Ga2_AgeD_(numper) = Ga2_AgeD;
    	Ga2_Adeb_(numper) = Ga2_Adeb;
    	Ga2_Afin_(numper) = Ga2_Afin;
     
    end;
    DROP Ga2_AgeD Ga2_Adeb Ga2_Afin  ;
     
    run;

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 747
    Points : 978
    Points
    978
    Par défaut
    Citation Envoyé par jejeletourb Voir le message
    Mon but c'est d'obtenir une seule ligne par individu, avec les informations de tous les contrats.
    tu fais quoi après avec?

  11. #11
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    L'objectif est d'harmoniser ma BDD. Merci pour toutes ces réponses !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] decaler un ou plusieur lignes d'items sur une listview en vb2010
    Par mylord666 dans le forum VB.NET
    Réponses: 0
    Dernier message: 02/06/2015, 11h01
  2. Récupérer la valeur d'une cellule avec fonction sur une autre feuille
    Par rogerlette dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/09/2010, 12h38
  3. [MaxDB] plusieures lignes du maxdb_fetch_array sur une ligne d'un tableau
    Par nicoda dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 01/02/2008, 16h52
  4. [Access] Requête sur une table et tri sur une autre
    Par VooDooS dans le forum Langage SQL
    Réponses: 2
    Dernier message: 30/08/2006, 15h07
  5. selection sur une table en fonction de plusieurs ligne
    Par dimdidi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/12/2004, 08h42

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