SAS and Food security monitoring : Ajouter la variable décade dans un fichier journalier de données.


Ajouter la variable  décade dans un fichier journalier  de données.


La manipulation des dates dans SAS s’effectue avec  plusieurs routines très puissantes.
Elle nécessite aussi quelques connaissances dans les formats et les informats de SAS.
Si dans une dataset, il ya une variable date de type DDMMYY (01011993 ou 1 janvier 1993), SAS permet de calculer  la décade correspondante à cette date.

Exemple : création d'une table contenant les dates du 1/01/1993 au 9/06/2012 soit 7100 jours (qu'est je foutu pendant ces 7100 jours !;). La routine est la suivante
-----------------
data datedek;                                                                         
do i = '01jan1993'd to '9Dec2009'd;
output;
end;
run;
-----------------------


Utilisation de la fonction INTCK et du format TENDAY
La fonction INTCK permet de calculer l’intervalle de temps entre deux périodes en année, mois, trimestre, semaines ou jours, décade, etc.. (Cf un des meilleurs blog francophones de SAS : http://thesasreference.wordpress.com/category/les-fontions/intck-fontions/).
Sa syntaxe est INTCK (Intervalle, date de début, date de fin). Intervalle peut être une expression, un caractère ou une variable. Pour les décades correspondant au 1er, 11ème et 21ème jour de chaque mois, SAS utilise TENDAY .
Pour le calcul de la variable décade, l’année a été dans un premier temps récupérée dans la variable i ci-dessus pour récréer une variable de début de chaque année. Cette variable sert de paramètre pour la date de début .
Le paramètre date de fin étant i. Ayant considéré la date de début de l’année considérée (celle de i), il faut réajouter i à la décade pour avoir la décade correcte. mdy(1,1,Year(i)) utilise la fonction MDY qui permet de convertir le mois, le jour et l’année en un date SAS. Par exemple MDY (4,8,1983) retourne  la date SAS ‘3AUG83’D.

******************Calcul de la dékad dans un fichier ayant plusieurs années**** ;
data decade;
set datedek;
DEK= intck('tenday', mdy(1,1,Year(i)),i)+1;
run;
-------------------------------
L’avantange de INTCK dans cette séquence est que le calcul est correct même en cas de jours manquant dans la table de données. Les utilisations ultérieures sont les synthèses décadaires très utilisées dans le suivi des campagnes agricoles pour la sécurité alimentaire





Commentaires

Posts les plus consultés de ce blog

EXTRACTION DE CARACTERE A DROITE DANS UNE VARIABLE SAS

PROC COMPARE in SAS with PROC SQL and LIBNAME ODBC