Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > SAS Base
SAS Base Forum d'entraide sur SAS base : étape data, procédures non statistiques, procédures non graphiques, SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/06/2011, 16h27   #1
Invité de passage
 
Inscription : juin 2011
Messages : 20
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 20
Points : 3
Points : 3
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 :
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:
Citation:
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 :
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!!!
Lamyaa34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 17h03   #2
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
C'est plutôt :
Code :
1
2
3
DATA ResultGarchNormalLast;
SET ResultGarchNormal(firstobs=6 );
run;
Mais ça reste manuelle, à moins que tu veuilles l'automatiser!
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/06/2011, 17h37   #3
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 823
Points : 2 823
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 :
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
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/06/2011, 21h03   #4
Rédacteur
 
Homme Stéphane
Consultant et formateur SAS et Cognos
Inscription : avril 2009
Messages : 1 791
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Localisation : France, Yvelines (Île de France)

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

Informations forums :
Inscription : avril 2009
Messages : 1 791
Points : 4 012
Points : 4 012
pourquoi ne pas récupérer la dernière date et sélectionner les lignes avec ?

Code :
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;
__________________
N'oubliez pas de cliquer sur lorsque votre problème est réglé !

Moteur de recherche dans les papiers SAS
datametric est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 29/06/2011, 10h08   #5
Invité de passage
 
Inscription : juin 2011
Messages : 20
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 20
Points : 3
Points : 3
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!!!
Lamyaa34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 10h17   #6
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Il suffit de transposer la table avec les deux observations, adaptes ceci à ton cas
Code :
1
2
3
4
proc transpose DATA=test out=transpose;
var c;  /* variable continue*/
id var /* var =PREDICT ou ACTUAL*/;
run;
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/06/2011, 10h49   #7
Invité de passage
 
Inscription : juin 2011
Messages : 20
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 20
Points : 3
Points : 3
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 :
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!!!
Lamyaa34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 10h52   #8
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
C'est plus simple si tu postais ton fichier au format Excel et expliquer ce que tu souhaites obtenir au final!
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/06/2011, 11h05   #9
Invité de passage
 
Inscription : juin 2011
Messages : 20
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 20
Points : 3
Points : 3
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.
Lamyaa34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 11h22   #10
Invité de passage
 
Inscription : juin 2011
Messages : 20
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 20
Points : 3
Points : 3
Par défaut le code

Je vous met en PJ mon code sas bac.txt
Lamyaa34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 11h28   #11
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
C'est plutôt la table qui nous permettra de débloquer ton problème!
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 11h45   #12
Invité de passage
 
Inscription : juin 2011
Messages : 20
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 20
Points : 3
Points : 3
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
Lamyaa34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 11h50   #13
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Je ne comprends pas, la table ResultatsGarchNormaltable1.xls n'est pas ce que tu souhaites obtenir?
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 11h55   #14
Invité de passage
 
Inscription : juin 2011
Messages : 20
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 20
Points : 3
Points : 3
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.
Lamyaa34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 13h41   #15
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Il faudrait la table initiale
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 15h06   #16
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 823
Points : 2 823
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).
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/06/2011, 16h02   #17
Invité de passage
 
Inscription : juin 2011
Messages : 20
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 20
Points : 3
Points : 3
Ok!
Merci pour vos réponses!!!
Lamyaa34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h21.


 
 
 
 
Partenaires

Hébergement Web