La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Commandes STATA pour microsimulations Anda David.

Présentations similaires


Présentation au sujet: "Commandes STATA pour microsimulations Anda David."— Transcription de 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 lon pourra utiliser ultérieurement. Les macros peuvent être locales ou globales selon leur champ dapplication, définissant ainsi où leur nom sera reconnu. Les macros locales sont créées dans un ficher «.do » ou «.ado » et cessent dexister une fois quon arrête lexécution du fichier.

3 Les Macros locales Il ne sagit pas de variables : au moment où on les « invoque », STATA ne fait que remplacer leur nom par le texte quelles contiennent avant dexécuter la commande. On peut ainsi écrire du code permettant dexé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 Lutilité 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 1 er et le dernier quintile dune 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) r(p95), detail regress … if r(p5) r(p95) Solution qui marche: summarize wage, detail local lo = r(p5) local hi = r(p95) summarize varlist if `lo

8 Les macros locales Afficher le contenu dune macro : quelques erreurs à ne pas commettre local x=1 display `x Remarques : o Noter la distinction entre les deux quotes o Il nest pas toujours indispensable dutiliser 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 local x 2+2 di `x local x = 2+2 di `x local x = 2+2 di `x local x -2 di `x^2 local x -2 di `x^2

10 Quand utiliser le signe =.local i 10.local j 10+`i.display `j local j = 10 + `i.display `j 20

11 Exemple de macros locales

12

13

14

15 Exemple de macros globales

16

17 Les boucles Il est possible dinté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 deffectuer des tâches répétitives comme appliquer à plusieurs variables les mêmes commandes. Quelques conseils : Noubliez jamais de sauvegarder le.do avant de tester une boucle. Loubli de lincrémentation du compteur ferait boucler à linfini 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 dobtenir à lécran : red blue green Remarque : lécriture dune boucle en mode itératif conduit Stata à numéroter les lignes. Vous navez 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. } Cest dailleurs tellement courant que Stata prévoit un code spécial pour ces situations : local colors red blue green foreach color of local colors { 1. di "`color 2. } Remarques : On a remplacé in par of parce que la macro locale décrit une liste type. Le nom de la macro locale na 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 { 1. di "`var'« 2. sum `var 3. } foreach var in price-rep78 { 1. di "`var'« 2. sum `var 3. } Dans lex1 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 lex2 Stata interprète price-rep78 comme une liste de plusieurs noms. Dans lex3 Stata interprète price-rep78 comme un seul mot et la commande ne sera donc exécutée quune seule fois.

21 La boucle FOREACH : les types de liste On utilise newlist pour une liste nouvelle de variables qui seront créées à lintérieur de la boucle. foreach var of newlist x1 x2 x3 x4 x5 { 1. gen `var'=0 2. } Cest 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 2. } Il faut noter que la macro `i joue le rôle dun 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 dutiliser 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 quon 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 dun compteur Critère darrê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 dautres matrices; matrix nom_matrice = vecteur ou matrice Exemple: 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 dune 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] Exemple: ineqdeco depenset1 if sim==3 [fw=weightpop]


Télécharger ppt "Commandes STATA pour microsimulations Anda David."

Présentations similaires


Annonces Google