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 :

Sélectionner les 2 dernières lignes d'une table [PROC]


Sujet :

SAS Base

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 20
    Points : 13
    Points
    13
    Par défaut Sélectionner les 2 dernières lignes d'une table
    Bonjour,

    J'ai un gros problème: j'ai fait une estimation avec la proc model d'un modèle garch donné ci dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    proc model data = insample outparms=param;
    parms c arch0 arch1 garch1 ;
    /* Equation moyenne*/;
    y = c;
    /* Equation variance*/
    h.y = arch0 + arch1*zlag(resid.y**2)+garch1*zlag(h.y);
    /* Estimation du modèle*/;
    fit y / fiml method=marquardt out=ResultGarchNormal outactual outpredicted;
    outvars date y h.y;
    run ;
    quit ;
    Comme vous pouvez le voir, j'ai demandé une table de sortie dans laquelle figurent notamment les valeurs actuelles et les valeurs prévues. Lorsque je fait une proc print de ma table, voila ce que j'obtiens:
    12014 FIML PREDICT 1 0.000220 05/04/2011 .000024718
    12015 FIML ACTUAL 1 0.000689 06/04/2011 .000022251
    12016 FIML PREDICT 1 0.000220 06/04/2011 .000022251
    12017 FIML ACTUAL 1 -0.002136 07/04/2011 .000020183
    12018 FIML PREDICT 1 0.000220 07/04/2011 .000020183
    12019 FIML ACTUAL 1 0.003608 08/04/2011 .000019048
    12020 FIML PREDICT 1 0.000220 08/04/2011 .000019048
    La nouvelle table qui a été crée ne possède pas de colonnes séparées pour les predicted et les actuals! les valeurs connues et les valeurs prévues sont toutes mélangées. Je ne sais pas si il existe un moyen de les séparer mais j'ai tenté autre chose. Ce qui m'intéresse en réalité, c'est de faire une prévision hors échantillon, j'aurais besoin pour cela des 2 dernières lignes de ma tables, c'est à dire les valeurs actuelles et prevue du 08/04/2011. J'ai toute de suite pensé à cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    proc print data=Resultgarchnormal;run;
    proc sort data=Resultgarchnormal; by date descending;run;
    data ResultGarchNormalLast;
    set ResultGarchNormal;
    firstobs=2 &obs=3;
    run;
    Mais la nouvelle table crée a repris toutes les observations et non pas uniquement les dernières!

    Quelqu'un aurait-il une solution??
    Merci!!!

  2. #2
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    C'est plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    data ResultGarchNormalLast;
    set ResultGarchNormal(firstobs=6 );
    run;
    Mais ça reste manuelle, à moins que tu veuilles l'automatiser!

  3. #3
    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.
    Ce serait surprenant que le code de ton message fonctionne : il y a plusieurs problèmes dedans (le DESCENDING après le nom de la variable dans la proc SORT par exemple) mais l'idée est bien la plus simple à automatiser.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    proc sort data=Resultgarchnormal; by DESCENDING date ;run;
    data ResultGarchNormalLast;
    set ResultGarchNormal (obs=2) ;
    run;
    Tu auras seulement les 2 premières observations de ta table triée par ordre chronologique décroissant.

    Quant à avoir une observation par date avec deux colonnes "ACTUAL" et "PREDICT" tu peux le faire avec une proc TRANSPOSE.
    Bon courage.
    Olivier

  4. #4
    Rédacteur

    Homme Profil pro
    SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Inscrit en
    Avril 2009
    Messages
    2 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 2 497
    Points : 6 064
    Points
    6 064
    Par défaut
    pourquoi ne pas récupérer la dernière date et sélectionner les lignes avec ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    proc sql;
    create table Resultgarchnormal2 as
    select * 
    from Resultgarchnormal
    where date in (select max(date) from Resultgarchnormal) 
    order by 3
    ;
    quit;

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 20
    Points : 13
    Points
    13
    Par défaut Proc transpose
    Bonjour,
    Merci à tous pour vos réponses!!! Je les aies essayées, elles marchent très bien mais je me rend compte au final que ça ne m'aide pas tellement dans mon programme de sélectionner les 2 dernières lignes. Je vais essayer de voir si avec la proc transpose je peux obtenir en plus de mes autres colonnes 2 autres colonnes: predicted et actual.
    Merci quand même pour vos réponses!!!

  6. #6
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Il suffit de transposer la table avec les deux observations, adaptes ceci à ton cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    proc transpose data=test out=transpose;
    var c;  /* variable continue*/
    id var /* var =PREDICT ou ACTUAL*/;
    run;

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 20
    Points : 13
    Points
    13
    Par défaut selectionner toutes les autres colonnes dans la proc transpose
    J'ai suivi ton conseil Megaminf et j'ai utilisé le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    proc transpose data=Resultgarchnormal out=ResultGarchNormalLast1;
    var y;
    id _type_ ;
    by date;
    run;
    Je pensais que les colonnes qui n'apparaissaient pas dena smon code seraient automatiquement reprise dans la nouvelle table mais ce n'est pas le cas. Du coup, j'ai ajouté la colonne que je voulais garder dans mon code:
    proc transpose data=Resultgarchnormal out=ResultGarchNormalLast1; var y h_y;id _type_ ;by date; run;
    Mais lorsque j'ouvre la table,je m'aperçois que la colonne h_y n'est plus une colonne mais des lignes: elle a été transposée. Au début je pensais refaire une autre transposée mais j'ai peur de perdre à nouveau les colonnes que je venais de créer.

    Que faire?? Merci!!!

  8. #8
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    C'est plus simple si tu postais ton fichier au format Excel et expliquer ce que tu souhaites obtenir au final!

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 20
    Points : 13
    Points
    13
    Par défaut en format excel?
    Je peux vous l'envoyer en format SAS si vous voulez. L'idée générale du code est de pouvoir construire une macro permettant de faire des prévisions hors échnatillon de la VaLUE-AT-RISK. Pour cela, j'ai estimé un mdèle GARCH avec une équation pour la moyenne et une équation pour la variance. Le problème, c'est qu'en transposant mes résultats la première fois, j'ai perdu une colonne dont j'ai besoin pour estimer la var. Je sais que si je fais une retransposition, je risque de perdre mes colonnes prédicted et actual.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 20
    Points : 13
    Points
    13
    Par défaut le code
    Je vous met en PJ mon code sas bac.txt

  11. #11
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    C'est plutôt la table qui nous permettra de débloquer ton problème!

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 20
    Points : 13
    Points
    13
    Par défaut Les tables!
    Désolé, je n'avais pas compris. En PJ, vous trouverez:
    Table 1=ResultatsGarchNormaltable1.xls
    Table 2=ResultatsGarchNormalLasttable2.xls
    Table4=ResultatsGarchNormal 2table4.xls
    Les autres tables sont trop grosses donc elles ne passent pas!
    Merci

  13. #13
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Je ne comprends pas, la table ResultatsGarchNormaltable1.xls n'est pas ce que tu souhaites obtenir?

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    non car il me faudrait une colonne avec h_y. J'aurais pu garder cette table si j'avais un moyen de dire au logiciel la ligne à sélectionner pour le calcul de la VaR. Du coup il me faut automatiquement une colonne h_y.

  15. #15
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Il faudrait la table initiale

  16. #16
    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
    Je pense que tu peux ajouter toutes les variables à conserver dans BY. Ca devrait suffire, puisqu'elles sont toutes liées à la date (citer celle-ci en 1er dans BY).

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Ok!
    Merci pour vos réponses!!!

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 14/10/2014, 23h45
  2. Réponses: 0
    Dernier message: 28/06/2013, 16h30
  3. Réponses: 7
    Dernier message: 28/03/2007, 13h57
  4. Enlever tous les retours à la ligne d'une table
    Par jehhej dans le forum Requêtes
    Réponses: 1
    Dernier message: 25/11/2006, 11h05
  5. Réponses: 6
    Dernier message: 09/06/2006, 18h22

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