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... vient de déménager !!!

Venez visiter notre nouveau site : www.master-esa.fr

#1 29-05-2007 15:13:17

esa_sr
Administrator
Date d'inscription: 21-02-2007
Messages: 5898
Site web

pas de fonction week dans SAS 8.2 ? pas grave...

Une étudiante de l'année 2004-2005 m'a contacté aujourd'hui pour me demander qu'il n'y avait pas dans SAS une fonction permettant de retrouver à partir d'une date la semaine dans l'année correspondant à cette date. Je lui réponds : la fonction "week"

Maintenant, il semblerait que la fonction week n'existe pas dans la version de SAS qu'elle utilise (8.2). comment faire pour retrouver le résultat donné par cette fonction si on n'a pas cette fonction ?

des bricolages de programmes sont toujours possibles - par exemple :

Code:

data bidon;
input x ddmmyy10.;
format x ddmmyy10.;
Y=weekday(x);
Z=x-'01jan2008'd;
week=int((z+weekday('01jan2008'd))/7)+1;
cards;
25/05/08
26/05/08
27/05/08
28/05/08
29/05/08
30/05/08
31/05/08
01/06/08
02/06/08
;
run;

bon, ce n'est pas trop joli - cela donne les résultats que l'on aurait avec la fonction week mais ce n'est pas sûr (et c'est même certain) que cela soit bon quelle que soit la date que l'on veut transformer  - de plus, vous remarquerez que pour calculer week, il me faut une référence vers le permier jour de l'année considérée, cela va vite devenir pénible si je gère dans mon fichier des années différentes.

tiens, soyons plus efficase et créons plutôt un format spécifique grâce à PROC FORMAT :

Code:

data format ;
retain fmtname "weeksansweekk" type "N" annee '01jan2000'd;
do start="1jan2000"d to "31dec2010"d;
     if put(start,julday.)*1=1 then annee=start;
     if weekday(annee)>1 then 
     label=int((put(start,julday.)*1+weekday(annee)-2)/7);
     else label=int((put(start,julday.)*1+weekday(annee)-2)/7)+1;
     output;
 end;
drop annee;

proc format cntlin=format;
run;

** petit fichier pour voir si cela fonctionne" ;

data bidon;
input x ddmmyy10.;
format x ddmmyy10.;
coco=put(x, weeksansweekk.);
cards;
25/05/2008
26/05/2008
27/05/2008
28/05/2008
29/05/2008
30/05/2008
31/05/2008
01/06/2008
02/06/2008
;
run;

** vérification que pour 2000-2010, ce que me donne la fonction week est 
bien identique à ce que j'observe par le passage par mon format spécifique"; 

data coco;
do date='1jan2000'd to '31dec2010'd;
week1=put(date,weeksansweekk.);
week2=week(date);
ctrl=week1-week2;
output;
end;
run;

proc freq data=coco;
tables ctrl;run;

comme j'ai perdu deux heures à écrire ce malheureux bout de programme (erreur en déclarant la valeur de  type dans le fichier format... quand vous créez un INFORMAT grâce à PROC FORMAT, type doit être égal à "I", j'ai donc pensé (bêtement) que type devait être égal à F puisqu'il s'agissait de créer un Format... - lorsque l'on crée un format, type est égal à N si votre format est numérique et C si c'est de l'alpha)

un peu de lecture ici : www.ats.ucla.edu/STAT/sas/library/nesug00/bt3001.pdf

cordialement

SR

Hors ligne

 

#2 30-05-2007 11:49:40

gang
Member
Lieu: Orleans
Date d'inscription: 05-03-2007
Messages: 324

Re: pas de fonction week dans SAS 8.2 ? pas grave...

pas mal le bidouillage c'est ca que j'aime sous sas il y a tjrs une solution ...
par contre est ce que cette fonction existerait sur d'autres versions de sas la version  9 notamment?

Hors ligne

 

#3 30-05-2007 12:32:28

esa_sr
Administrator
Date d'inscription: 21-02-2007
Messages: 5898
Site web

Re: pas de fonction week dans SAS 8.2 ? pas grave...

la fonction week existe bien sûr dans les versions 9 et ultérieures (par contre, je trouve vraiment étonnant que la fonction week n'existe pas en 8.2...)

cordialement

SR

Hors ligne

 

Pied de page des forums

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson

[ Generated in 0.022 seconds, 7 queries executed ]