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 Discussion :

récupération de lien de personne


Sujet :

SAS

  1. #1
    Nouveau Candidat au Club
    récupération de lien de personne
    Bonjour,
    Je sollicite votre aide sur un sujet sur lequel je travaille en ce moment.
    J'ai deux tables qui se présentent comme: tab1


    [TH]nom[/TH]
    [TH]qte[/TH]
    az 10
    ab 11
    vb 45
    y 1
    xc 4

    et une table de lien: ab2


    [TH]prs[/TH]
    [TH]lien[/TH]
    az y
    y az
    wc ab
    y bb
    bb az

    je souhaite la sortie:


    [TH]nom[/TH]
    [TH]qte[/TH]
    az 10
    y 1
    bb valeur
    ab 11
    wc valeur

    l'idée est que chaque fois q'une personne dans la tab1 respecte une condition, je rapatrie toutes les personnes liées à cette personne et je les range en dessous (comme sur la tab de sortie)

  2. #2
    Membre expérimenté
    Bonjour,
    Je te propose une méthode simple et classique :
    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
     
    data tab_1 ;
    input nom $ qte ;
    cards ;
    az	10
    ab	11
    vb	45
    y	1 
    xc	4 
    ; run ; 
     
    /* une table de lien: Tab2 */
     
    data tab_2 ;
    input prs $ lien $ ;
    cards ;
    az	y 
    y	az
    wc	ab
    y	bb
    bb	az
    ; run ; 
     
    data tab_Twin ;
    set tab_2 ;
    array are(2) $ prs lien ;
    do i=1 to 2 ;
    nom=are(i) ; output ;
    end  ;
    run ;  
     
    proc freq data=tab_twin ;
    tables nom / noprint out= twin_freq(keep=nom) ;
    run ;  
     
    proc sort data=tab_1 ;     by nom ; run ;
    proc sort data=twin_freq ; by nom ; run ;
     
    DATA final;
    merge tab_1 (IN=A) twin_freq (IN=B);
    BY nom;
    IF B ;
    if missing(qte) then qte=-999999 ;
    run;


    Bon courage
    Ward

  3. #3
    Nouveau Candidat au Club
    a Ward
    Bonjoiur Ward,
    Je vous remercie pour votre approche de solution mais dès que je change la table des liens, rien ne fonctionne. ce que je souhaite est que chaque individu de la tab1 soit suivi par les personnes liées. exemple:

    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
    data tab_1 ;
    input nom $ qte ;
    cards ;
    az 10
    ab 11
    vb 45
    y 12
    xc 43
    wc 8
    bb 97
    ; run ; 
     
    /* une table de lien: Tab2 */
     
    data tab_2 ;
    input prs $ lien $ ;
    cards ;
    az y 
    y az
    wc ab
    y bb
    bb az
     
    ; run ;


    si je prends "az" de la tab1, j'aimerais qu'il soit suivi par "y","bb" (peu importe l'ordre) avant de prendre l'individu "ab"( qui lui sera suivi par "wc" et etc... je veux gérer les liens comme une famille (le pere, suivi par la mere et puis les enfants ou vice versa).
    Merci encore pour votre aide.

  4. #4
    Membre expérimenté
    Bonjour,
    Je te conseille de voir le code dans le lien suivant qui traite un sujet semblable par des tables de hachage :

    https://www.developpez.net/forums/d1...-meme-famille/

    Bon Courage
    Ward