Bonjour,
Voici la table 1 (j'ai remplacé les valeurs manquantes par un "?" pour plus de lisibilité :
MOIS VAR1 VAR2
Janvier 20 10
Février 30 8
Mars 25 ?
Avril ? ?
Mai 30 ?
Juin 31 ?
Juillet 34 12
Août 35 9
Septembre 40 7
Octobre 38 9
Novembre ? 10
Décembre ? 11
Voici la table 2 (résultat que j'aimerai obtenir):
MOIS VAR1 VAR2
Janvier 20 10
Février 30 8
Mars 25 8
Avril 25 8
Mai 30 8
Juin 31 8
Juillet 34 12
Août 35 9
Septembre 40 7
Octobre 38 9
Novembre ? 10
Décembre ? 11
pour le moment je ne sais pas comment dire à SAS comment s'arreter pour les dernieres valeurs de la variable VAR1 - Je veux que SAS remonte la valeur précédente si VAR1=. et que la valeur précédente >0 et valeur suivante (m+1ou m+2 ou m+3...) >0.
Pour le moment mon code est :
avec ce code j'obtiens la table3 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 %macro vv(var) DATA Table3 (DROP=prov); SET Table1 /* retient la valeur précédente */ retain prov; /* remplace les données manquantes */ IF &var.=. then &var.=prov; prov=&var.; run; %mend; %vv (VAR1); %vv (VAR2);
MOIS VAR1 VAR2
Janvier 20 10
Février 30 8
Mars 25 8
Avril 25 8
Mai 30 8
Juin 31 8
Juillet 34 12
Août 35 9
Septembre 40 7
Octobre 38 9
Novembre 38 10
Décembre 38 11
Je ne veux pas qu'il me remplace les valeurs manquantes par les chiffres en violets car il n'y a plus de valeur après octobre pour la Variable VAR1.
Merci de votre aide
-----------
Je viens de trouver la réponse à mon pb. le code est le suivant (mais avec ce code, ça ne marche plus avec la VAR2):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 %macro vv(var) DATA Table2/*(DROP=prov)*/; SET Table1; /* retient la valeur précédente */ retain prov; dd=dif(&var.); /* remplace les données manquantes */ IF &var.=. and dd ne . then &var.=prov; prov=&var.; run; %mend; %vv(VAR1); %vv(VAR2);
---------
J'ai ajouté cette ligne :
ça marche pour le cas ci dessus (VAR 1 er 2) mais si l'on a les deux contraintes dans une meme variable ça ne va plus marcher.
Code : Sélectionner tout - Visualiser dans une fenêtre à part If &Var.=. and last.&Var.=. then &Var.=.;
Partager