Publié le :

Macro Mean_Abs_Deviation

Ce code est également disponible en : Deutsch English Español
En attente de validation
Cette macro calcule l'écart absolu moyen, défini comme la moyenne des valeurs absolues des écarts à la moyenne. Le script utilise des procédures standard (MEANS, TRANSPOSE) et des étapes DATA pour manipuler les structures de données. Il dépend de macros utilitaires externes (%ranname et %get_number_column_names) pour la gestion des noms de variables et des fichiers temporaires.
Analyse des données

Type : EXTERNE


Les données sont fournies via le paramètre macro &returns. Le script attend des données numériques représentant des rendements.

1 Bloc de code
MACRO DEFINITION
Explication :
Définition de la macro et initialisation des variables locales et des noms de tables temporaires via une macro externe %ranname. Identification des colonnes numériques via %get_number_column_names.
Copié !
1%macro Mean_Abs_Deviation(returns, dateColumn= DATE, outData= mean_abs_dev);
2...
3%let vars= %get_number_column_names(_table= &returns, _exclude= &dateColumn);
4...
2 Bloc de code
PROC MEANS Data
Explication :
Calcul de la moyenne des rendements pour chaque variable numérique du jeu de données d'entrée.
Copié !
1 
2PROC MEANS
3DATA= &returns mean noprint;
4OUTPUT out= &meanData;
5RUN;
6 
3 Bloc de code
DATA STEP Data
Explication :
Nettoyage de la table des statistiques pour ne conserver que les moyennes, suppression des statistiques inutiles (STD, MIN, MAX).
Copié !
1DATA &meanData;
2 SET &meanData;
3 drop _freq_ _type_ &dateColumn;
4 IF _stat_ = 'N' THEN delete;
5...
4 Bloc de code
PROC TRANSPOSE Data
Explication :
Transposition des tables de moyennes et des données brutes (prix/rendements) pour faciliter les calculs vectoriels par la suite.
Copié !
1PROC TRANSPOSE DATA= &meanData out= &meanData;
2RUN;
3...
4PROC TRANSPOSE DATA= &returns(drop=&dateColumn) out= &price_t;
5RUN;
5 Bloc de code
DATA STEP Data
Explication :
Fusion des données brutes avec leurs moyennes respectives. Utilisation d'un tableau (ARRAY) pour calculer la valeur absolue de la différence entre chaque observation et la moyenne (Abs(Value - Mean)).
Copié !
1DATA &merged;
2 MERGE &price_t &meanData;
3RUN;
4...
5DATA &merged(drop= &i mean);
6 SET &merged;
7 array z[*] &z;
8 DO &i= 1 to dim(z);
9 z[&i]= sum(z[&i], -(Mean));
10 z[&i]= abs(z[&i]);
11 END;
12RUN;
6 Bloc de code
PROC MEANS Data
Explication :
Calcul final de la moyenne des écarts absolus (MAD) sur les données transformées.
Copié !
1 
2PROC MEANS
3DATA= &merged mean noprint;
4OUTPUT out= &outData;
5RUN;
6 
7 Bloc de code
PROC DATASETS
Explication :
Nettoyage des tables temporaires générées durant l'exécution de la macro.
Copié !
1PROC DATASETS lib= work nolist;
2delete &meandata &merged &price_t;
3RUN;
4QUIT;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : Copyright (c) 2015 by The Financial Risk Group, Cary, NC, USA.


Banner
Le Conseil de l'Expert
Expert
Simon
Expert SAS et fondateur.
« En finance, le MAD est un excellent complément au Ratio de Sharpe. Il permet d'évaluer la "respiration" normale d'un actif sans que les chocs de marché rares ne viennent gonfler artificiellement la mesure du risque. Pour une analyse complète, vous pourriez comparer ce résultat à l'écart-type : un écart important entre les deux suggérerait la présence de queues de distribution épaisses (fat tails). »