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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 20
    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 Expert
    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
    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 : 48
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    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 : 52
    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
    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 averti
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 20
    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 Expert
    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
    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;

+ 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