Le forum du Master ESA économétrie et statistique appliquée - Université d'Orléans

Vous n'êtes pas identifié.

Annonce

Vous êtes sur le forum du master ESA !

Le site du master ESA - description de la formation, notes de cours, contacts... est ici :

http://www.univ-orleans.fr/deg/masters/ESA/

#1 25-09-2008 08:46:52

AHOYO
New member
Date d'inscription: 25-09-2008
Messages: 7

réponses aux M2 promo 2008/2009 (2 méthodes pour calculer la VAR HS)

/*Avec ces  deux méthodes ,vous n'aurez pas besoin de proc iml */

/*1 ère méthode pour calculer la var hs */

data zozo;
input p1 p5;
cards;
run;
%macro  insert_percentile;

proc sql;
insert into zozo
values (&p1,&p5);
quit;
%mend insert_percentile;

data  toto;
do t = 1 to 500;
rdt= ranuni(-2)*t;
output;
end ;
run;


%macro creation_percentile;
ods listing close;
%do i=0 %to 249;
data  tata ;
set  toto (firstobs=%eval(1+&i) obs=%eval(250+&i));
run;

proc univariate data= tata;
var rdt;
output out= percentile p1= p1 p5=p5;
run;

data _null_;
set percentile;
call symput ('p1',p1);
call symput ('p5',p5);
call execute ('%insert_percentile');
run;
%end;
%mend creation_percentile ;

%creation_percentile;

ods listing;

*création d'une table  temporaire zozo,qui va servir plutard à insérer les percentiles ;
*macro  'insert_percentile' permettant d'insérer les percentiles estimés  dans la table temporaire zozo  avec  sql;
*ici j'ai pris une table  'toto' quelconque  ressemblant à peu près à la table que vous allez utilisez,juste pour décrire ce que je fais;


*création de la macro  'creation_percentile' ,qui va utiliser les facilités  des data step: firstobs et obs pour faire une table glissante;
* j'utilise ici  'ods listing close' pour bloquer toute sortie dans  ma fenêtre de résultats,sans cette option on aurait compter 250 icones 'proc univariate' dans la fenêtre de résultats;
*je prends le soin d'utiliser 'ods listing' à la fin de l'exécution de ma macro pour débloquer  la fenêtre de résultats que j'avais bloqué;
*création de macro variables contenant les percentiles avec 'call symput' dans le step 'data _null_';
*cérise sur le gâteau je fais tourner une procédure  sas dans une étape data grâce à la commande 'call execute' ;



/*2ème méthode plus subtile ,plus short, et plus fast  que la précédente , car je code en sql/macro*/

data zozo;
input p1 p5;
cards;
run;

data  toto;
do t = 1 to 500;
rdt= ranuni(-2)*t;
output;
end ;
run;


%macro creation_percentile;
ods listing close;
%do i=0 %to 249;
data  tata ;
set  toto (firstobs=%eval(1+&i) obs=%eval(250+&i));
run;

proc univariate data= tata;
var rdt;
output out= percentile p1= p1 p5=p5;
run;

proc sql;
select p1,p5 into :p1,:p5 from percentile ;
insert into zozo
values (&p1,&p5);
quit;
%end;
%mend creation_percentile ;

%creation_percentile;
ods listing;

Hors ligne

 

Pied de page des forums

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson