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 :

Fusion de deux tables


Sujet :

SAS Base

  1. #1
    Membre à l'essai
    Homme Profil pro
    Doctorant
    Inscrit en
    Novembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2014
    Messages : 22
    Points : 18
    Points
    18
    Par défaut Fusion de deux tables
    Bonjour à tous,

    table1.xlstable2.xlstable3.xlsx
    J'ai une table qui contient trois variables qui sont: CRSP_Fundno, datem et Mret qui sont respectivement les codes attribués aux fonds communs de placement, la date de la publication des rendements et le rendement des fonds. Il est à mentionner que datem prend la forme suivante : annéemois (198401: janvier 1984).
    Le fichier "table1 " joint à ce message te donnera plus de détails sur une partie de la table en question (pour simplifier, j'ai choisi seulement les 10 premiers fonds de mon étude).
    Chaque fonds a sa propre longévité. Par exemple, pour le fonds N 51, les rendements sont disponibles de 198502 à 200007, alors que le fonds N 105, sa longévité débute le 198507 et finit le 201302 et ainsi de suite.
    D'un autre coté, l'étude, sur laquelle je travaille, couvre la période de 198401 jusqu'à 201312. Une autre table (table2) contient deux variables datem et m. Le hic est que cette période doit être considérée pour chaque fonds. le résultat donne la table 3. On peut remarquer que les rendements retenus des fonds sont ceux qui sont entre 198401 et 201312 seulement et puis le m qui servira au calcul de la performance est présent pour chaque fonds avec les valeurs aussi de 198401 et 201312. J'ai pu obtenir ce tableau avec Excel, autrement j'ai fait ça à la main. mais pour 3000 fonds ça sera impossible. c'est pourquoi je veux un programme pour avoir cette table.
    Le problème est un peu compliqué, j'espère que j'étais clair. J'ai tenté avec les opérateurs fusion et d'en faire des clés communes et autres mais en vain.
    Merci d'avance.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur en SAS/ Statisticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 483
    Points : 1 552
    Points
    1 552
    Par défaut
    Bonjour,
    Dans la table1.xls les enregistrements de 1060 à 1246 du fond (309) ne font pas partie de la période étudiée me semble-t-il ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Doctorant
    Inscrit en
    Novembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2014
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Re-bonjour,

    L'objectif consiste à faire une fusion de la table 1 et la table 2. Comme l'étude couvre seulement la période 198401 à 201312, les autres rendements des autres dates ne seront pas retenus. Les fonds étudiés n'ont pas la même longévité comme vous pouvez le constater. la table 2 me fournit la variable m1 ( le facteur d'escompte stochastique) qui sera appliquée à chacun des fonds sur la période d'étude. La table 3 correspond parfaitement au résultat souhaité. Évidemment, les lignes n'ayant pas de rendement peuvent être supprimées.

    J'ai tenté alors, à l'aide de SAS, d'extraire de la base de données les fonds dont j'ai besoin avec leurs rendements et leurs dates respectifs (table 1). D'un autre coté, j'ai créé une deuxième table contenant les codes des fonds et la date de l'étude de 198401 à 2013012 (c'est dans ce forum que la question a été posée et résolue). Mon idée est de faire une fusion sur la table 1 et la table 2 et d'obtenir la résultante qui me donne les codes des fonds, la période de 198401 à 201312 pour chaque fonds et les rendements qui correspondent à ces dates ( les fonds qui ont vu le jour en 196801 par exemple et qui ont disparu en 200501, seuls les rendements de 198401 à 200501 seront considérés. La période 196801 à 198312 est exclue.). Une fois, cette table créée, j'aurai à rajouter la variable m1 pour obtenir ce que je veux. Toutefois, je ne suis pas sûr que ma démarche soit la bonne pour atteindre mon objectif.

    Merci d'avoir pris le temps de me répondre.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Doctorant
    Inscrit en
    Novembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2014
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Voici le code SAS mis en place pour répondre à mes attentes. La table 1 et la table 2 me donnent exactement le résultat attendu. Malheureusement, la fusion de ces deux tables, que je je le fasse par "by datem" ou "by crsp_fundno" ou encore " by crsp_fundno datem" ne me procure pas la table espérée. La structure de la table 3 jointe à cette discussion est l'objectif souhaité. Je suis débutant en SAS, alors, je suis persuadé qu'il y a d'autres façons plus efficaces pour améliorer le code ci-dessous.Merci.
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    /*Base de données de tous les fonds mutuels*/
     
    proc copy in=SASUSER out=WORK;
       select monthly_returns;
    run;
     
    data rendement;
         set monthly_returns;
         rename caldt=datem;
         label caldt='datem';
         format caldt yymmn6.;
    run;
     
    /*  Numéro des Fonds retenus pour l'étude*/
    PROC IMPORT OUT=codes_fonds 
                DATAFILE= "C:\USERS\ALI\DESKTOP\Fondsmutuels.csv" 
                DBMS=DLM REPLACE; GETNAMES=YES; delimiter=';';
    RUN;
     
    /* Extraire les rendements et  les dates des fonds retenus*/
     
    data table1;
       merge codes_fonds (in=A)
             rendement (in=B);
       by crsp_fundno;
       if A and B;
    run;
     
    /* Dérouler la période d'étude sur chaque fonds */
    data date;
    format datem yymmn6.;
    do crsp_fundno=1 to 500;
    datem= 8766;
     
    output;
    do until(Datem =19693);
    	datem = intnx('month',datem,1);
     
        output;
    end;
    end;
     run;
     
     data table2;
       merge date (in=A)
             codes_fonds (in=B);
       by crsp_fundno;
       if A and B;
    run;
     
    /* Fusionner la table 2 et 3*/
     
    data table3;
       merge table1 (in=A)
             table3 (in=B);
       by crsp_fundno datem;
       if A and B;
    run;

Discussions similaires

  1. Simplification de fusion de deux tables
    Par traersa dans le forum ODS et reporting
    Réponses: 1
    Dernier message: 15/03/2012, 14h38
  2. [AC-2007] fusion de deux tables
    Par ALEX80800 dans le forum Modélisation
    Réponses: 2
    Dernier message: 08/01/2012, 12h26
  3. [DATA] fusion de deux tables
    Par petit-ours dans le forum SAS Base
    Réponses: 2
    Dernier message: 07/09/2010, 15h53
  4. fusion de deux tables
    Par petit-ours dans le forum SAS Base
    Réponses: 2
    Dernier message: 27/07/2010, 08h38
  5. Fusion de deux tables : MERGE ou SET
    Par Flynt dans le forum SAS Base
    Réponses: 10
    Dernier message: 23/06/2008, 10h51

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