Bonjour,
je viens de rencontrer un problème plutôt étonnant dans SAS et je n'ai pas réussi à trouver d'explication.
J'ai une base de donnée de cette forme :
Mon objectif est de calculer y(t+1)=x(t+1)/x(t). Je suis donc parti sur un code type :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 data test; input t x; datalines; 1 2 2 5 3 8 4 1 5 2 6 7 ; run;
Le code fonctionne bien, mais ne me remplit qu'une seule ligne à chaque exécution du dataset. Pour le moment je suis donc obligé de mettre ce bout de code dans une macro et faire tourner une boucle %do i=1 %to 6, ce qui est très peu élégant et surtout très long (j'ai en réalité 65 millions de lignes).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 data test; set test; lag_x=lag(x); if t^=1 then do; lagx=lag_x; y=x/lagx; end; run;
Il est très compliqué d'utiliser des array car ma variable t n'est pas une clé de table, je dispose de plusieurs agrégat de données sur la même période de temps.
D'après mes recherches, lors de la phase de compilation SAS identifie les valeurs manquantes et n'applique pas le calcul sur ces valeurs lors de la phase d’exécution.
Si quelqu'un à un moyen efficace pour régler ce problème je suis preneur !
Merci
Partager