Télécharger la présentation
1
Commandes STATA pour microsimulations
Anda David
2
Les Macros locales Une macro est une sorte de « boîte » dans laquelle on stocke des informations que l’on pourra utiliser ultérieurement. Les macros peuvent être locales ou globales selon leur champ d’application, définissant ainsi où leur nom sera reconnu. Les macros locales sont créées dans un ficher « .do » ou « .ado » et cessent d’exister une fois qu’on arrête l’exécution du fichier.
3
Les Macros locales Il ne s’agit pas de variables : au moment où on les « invoque », STATA ne fait que remplacer leur nom par le texte qu’elles contiennent avant d’exécuter la commande. On peut ainsi écrire du code permettant d’exécuter différentes choses selon la valeur prise par les macros au moment où le code est exécuté. Syntaxe : local name targetname local name = targetname (dans le cas de scalaires)
4
Les Macros locales Exemples :
. local pays France Italie Allemagne Brésil . local ctycode . display “`pays’” France Italie Allemagne Brésil . display “`ctycode’” . local list=“age weight sex” . regress outcome `list’ . regress outcome age weight sex
5
L’utilité des macros Exécution de commandes sur des sous-échantillons dont la définition est complexe: summarize … if (hours>0|hours>=.) & weeks>0 & earn>0 & earn/weeks>100 tabulate … if (hours>0|hours>=.) & weeks>0 & earn>0 & earn/weeks>100 regress … if (hours>0|hours>=.) & weeks>0 & earn>0 & earn/weeks>100 Avec des macros: local if = “if (hours>0|hours>=.) & weeks>0 & earn>0 & earn/weeks>100” summarize … `if’ tabulate … `if’ regress … `if’
6
Les erreurs à ne pas commettre
. local a = . local b = . local c = . di (-`b' + sqrt(`b')^2-4*`a'*`c')/(2*`a') Pourquoi (`b’)^2 et pas `b’^2?
7
Un petit exemple Calculer le 1er et le dernier quintile d’une distribution , puis calculer des statistiques descriptives pour chacun de ces quantiles et faire des régressions. (sysuse nlsw88) Solution qui ne marche pas: summarize wage, detail summarize varlist if r(p5)<wage & wage>r(p95), detail regress … if r(p5)<wage & wage>r(p95) Solution qui marche: local lo = r(p5) local hi = r(p95) summarize varlist if `lo’<wage & wage<`hi’, detail regress … `lo’<wage & wage<`hi’
8
Les macros locales Afficher le contenu d’une macro : quelques erreurs à ne pas commettre local x=1 display `x‘ Remarques : Noter la distinction entre les deux quotes Il n’est pas toujours indispensable d’utiliser le signe « = » pour définir des macros locales local x = 1 est identique à local x 1
9
Quand utiliser le signe “=“
Pour comprendre dans quelles situations le signe « = » est nécessaire, il suffit de voir la différence entre les deux programmes suivantes : A votre avis, que donnera : local x 2+2 di `x’ di “`x’” local x = 2+2 di `x’ di “`x’” local x -2 di `x’^2
10
Quand utiliser le signe “=“
.local i 10 .local j 10+`i’ .display “`j’” local j = 10 + `i’ 20
11
Exemple de macros locales
12
Exemple de macros locales
13
Exemple de macros locales
14
Exemple de macros locales
15
Exemple de macros globales
16
Exemple de macros globales
17
Les boucles Il est possible d’intégrer des boucles à un .do. Les boucles possibles: while foreach forvalues. La commande while oblige le logiciel à répéter la commande entre accolades jusqu‘à ce que la condition précisée par while ne soit plus vraie. Il faut d'abord lancer un compteur par le biais d'une macro locale, puis préciser la condition de la boucle. Les commandes foreach permettent d’effectuer des tâches répétitives comme appliquer à plusieurs variables les mêmes commandes. Quelques conseils : N’oubliez jamais de sauvegarder le .do avant de tester une boucle. L’oubli de l’incrémentation du compteur ferait boucler à l’infini Stata...
18
La boucle FOREACH : syntaxe
foreach nom_de_la_macro in/of [list type] list { code involving `macroname'... } Remarques: In ou of selon le type de liste Toutes les commandes situées entre les parenthèses seront exécutées pour chacun des items de la liste. Exemple : foreach color in red blue green { 1. di "`color'" 2. } Permet d’obtenir à l’écran : red blue green Remarque : l’écriture d’une boucle en mode itératif conduit Stata à numéroter les lignes. Vous n’avez pas à le faire en mode éditeur de texte.
19
La boucle FOREACH : exemple simple
Il est plus simple de faire figurer au préalable la liste dans une macro : local colors red blue green foreach color in `colors' { 1. di "`color'" 2. } C’est d’ailleurs tellement courant que Stata prévoit un code spécial pour ces situations : foreach color of local colors { 1. di "`color’” Remarques : On a remplacé in par of parce que la macro locale décrit une liste type. Le nom de la macro locale n’a pas besoin d’être entre quotes.
20
La boucle FOREACH : les types de liste
Il existe plusieurs types de liste : varlist, newlist, et numlist. Illustration à partir de la base auto installée avec Stata (sysuse auto) foreach var in price mpg rep78 { 1. di "`var'« 2. sum `var‘ 3. } foreach var of varlist price-rep78 { foreach var in price-rep78 { Dans l’ex1 la liste est une suite de 3 mots qui sont ensuite considérés comme des noms de variables dans les commandes qui suivent. Dans l’ex2 Stata interprète price-rep78 comme une liste de plusieurs noms. Dans l’ex3 Stata interprète price-rep78 comme un seul mot et la commande ne sera donc exécutée qu’une seule fois.
21
La boucle FOREACH : les types de liste
On utilise newlist pour une liste nouvelle de variables qui seront créées à l’intérieur de la boucle. foreach var of newlist x1 x2 x3 x4 x5 { 1. gen `var'=0 2. } C’est bien sûr gen qui génère les nouvelles variables On utilise numlist pour une liste de nombres : foreach i of numlist 1/5 { 1. gen y`i'=0 Il faut noter que la macro `i‘ joue le rôle d’un indice accolé à la variable y
22
Exemples de boucle FOREACH (1)
foreach v of varlist price mpg rep78{ 2. summarize `v', detail 3. } local ctycode local i 0 foreach c of local ctycode { 2. local ++i 3. local rc "`rc' (`i'=`c')" 4. } display "`rc'« (1=111) (2=112) (3=136) (4=134)
23
La boucle FORVALUES Avec la boucle forvalues on peut faire une boucle sur une liste de nombres. Au lieu d’utiliser foreach i of numlist on peut utiliser forvalues. forvalues i = 1/5 { 1. gen z`i’=0 2. } Remarque : On peut compter autrement que de 1 en 1. forvalues i = 1 (3) 30 { 2. gen z_`i'=`i' 3. }
24
FORVALUES: Exemple On suppose qu’on a 4 variables, gdp1, gdp2, gdp3 and gdp4 avec les valeurs du PIB pour 4 pays. On peut utiliser les similarités des noms des variables pour créer une boucle pour les commandes generate et summarize. forvalues i=1/4{ 2.generate double lngdp`i’=log(gdp`i’) 3. summarize lngdp`i’ 4.}
25
FORVALUES: Exemple Si les variables sont plutôt indexées par le nom du pays alors on utilisera foreach (UKgdp, USgdp, DEgdp and FRgdp) foreach c in US UK DE FR { 2.generate double lngdp`c’=log(gdp`c’) 3. summarize lngdp`c’ 4.} ou .local country US UK DE FR .foreach c of local country {…
26
La boucle WHILE local i = 1 while `i’<=10 { display `i’ local i = `i’+1 } Définition d’un compteur Critère d’arrêt ( ne pas oublier le « } ») Toutes les commandes entre { et } seront exécutées via la boucle Incrémentation du compteur (le pas de la variation dépend du cas étudié)
27
WHILE: Exemple Si on veut répéter la même analyse sur deux bases de donnée set95.dta et set96.dta : local i=95 while `i’<=96 { use set`i’ reg prob gender local i = `i’+1 }
28
Manipuler des scalaires
scalar define : définit des variables scalaires; scalar def nom_scalaire = expression Exemple: scalar def quatre = 4 scalar dir / list : liste le contenu des scalaires; scalar dir scalar list _all scalar list nom_scalaire scalar drop : supprime les scalaires. scalar drop nom_scalaire
29
Commandes matricielles
Créer des matrices : mkmat: permet des convertir des variables en matrices; mkmat varlist [if] [in] [, options] Exemple: sysuse auto mkmat price mpg turn matrix dir matrix list price matrix: crée des matrices à partir des vecteurs ou d’autres matrices; matrix nom_matrice = vecteur ou matrice matrix X = (2 , 3 \ 2 , 1 \ 1 , 1) matrix Y = (1 \ 0 \ -1) matrix beta = inv(X’*X)*X’*Y
30
Commandes matricielles (2)
Lister des matrices: matrix dir : liste les noms des matrices existantes; matrix list nom_matrice : liste le contenu d’une matrice; Exemple: matrix list beta Renommer des matrices: matrix rename nom_matrice1 nom_matrice2 Supprimer une matrice: matrix drop nom_matrice Matrix drop _all
31
Commandes matricielles (3)
Nommer des colonnes et des lignes : matrix coln / rown matrice=nom_col / nom_ligne Exemple: matrix coln X = X1 X2 Calcul des données à partir des vecteurs: matrix score nouvelle_var = nom_vecteur
32
Indicateurs de pauvreté et inégalité
Indices Foster, Greer and Thorbecke. povdeco nom_var [if] [poids], [bygroup] varpl(ligne de pauvrete) Exemple: povdeco depenset1 if sim==1 [w=weightpop], by(urbrur) varpl(z) Coefficient de Gini ineqdeco nom_var [if] [poids], [bygroup] ineqdeco depenset1 if sim==3 [fw=weightpop]
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.