Bonjour,
Pour des fins de régressions en fenêtre roulante, j’ai codé le programme ci-dessous permettant de créer les variables NewDate, w et ws. L’objectif était d’établir une fenêtre de 12 mois qui avance d’un mois d’une boucle à une autre, et ce, pour chaque fonds mutuel identifié par la variable, Fund Identifier (crsp_fundno). Pour simplifier les choses, seulement deux fonds sont utilisés (les fonds n’ont pas tous les mêmes dates de début et de fin) Le programme me permet d’obtenir le résultat désiré qui est schématisé comme suit (avec un fonds dont les données s'étalent de janvier 2012 à décembre 2016):
201201 201202 ............. 201212 (boucle1)
201202 201203...................201301 (boucle2)
201203 201204.......................201302 (boucle 3)
etc
201601................................................................ 201612 (dernière boucle)
Je précise que la variable datem est de format numérique alors que la variable CALDT est de format date YYMMDDN8.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 Data lastdate (keep=CRSP_FUNDNO LastDt); set verif1; format LastDt YYMMDD10.; by CRSP_FUNDNO Datem; if last.CRSP_FUNDNO then do; LastDt = intnx('month',CALDT,0,'end'); output; end; run; Data NewTable (keep=CRSP_FUNDNO CALDT LastDt); merge Verif1 LastDate; by CRSP_FUNDNO; run; Data NewTable2 (drop=CALDT); set NewTable; format NEWDate YYMMDD10.; by CRSP_FundNo Caldt; retain w; if first.CRSP_FundNo then w = 0; Do ws = 1 to 12 ; NewDate = intnx('month',CALDT,ws-1,'end'); if ws = 1 then w + 1; if NewDate LE LastDt then output; end; run;
Je souhaite modifier ce programme pour que l’incrément soit désormais de deux mois (par exemple). En d’autres termes, je garde toujours ma fenêtre de 12 mois qui représente la longueur d’échantillon de la boucle mais cette fois-ci le début de chaque boucle avancera de deux mois. Voici le résultat espéré :
201201 201202 ............. 201212 (boucle1)
201203 201204...................201302 (boucle2)
201205 201206.......................201304 (boucle 3)
etc
201601................................................................ 201612 (dernière boucle)
Vous trouverez en pièce jointe un fichier Excel qui contient les données utilisées. Y aura-t-il quelqu’un qui pourrait m’indiquer comment changer le programme pour obtenir ce résultat ?
Je vous remercie pour le temps qui y sera consacré !
Partager