Occasionnellement, une étape de votre travail (un morceau de transformation de données, une certaine analyse) doit être effectuée de manière répétée, avec une légère variation. Imaginez que vous souhaitiez effectuer plusieurs analyses de régression avec un ensemble donné de variables indépendantes, par exemple, afin d’étudier l’effet de ces variables sur une série de résultats. (Notez que pour une analyse entièrement simultanée de plusieurs résultats, on pourrait peut-être utiliser la procédure sureg
; supposons simplement que ce n’est pas ce que nous voulons faire ici). Bien sûr, vous pourriez écrire la première commande, copier la ligne de commande, échanger le nom de la variable dépendante, et ainsi de suite. Mais les boucles rendent parfois les choses plus faciles.
Il existe deux façons de définir les boucles : foreach
fait référence à une liste d’éléments à énumérer, alors queforvalues
fait référence à une plage de nombres avec l’effet que ce qui suit est exécuté sur chacun de ces nombres. Les exemples suivants permettront, je l’espère, de clarifier les choses.
Les boucles avec foreach
Reprenons l’exemple avec lequel j’ai commencé cette entrée. Supposons que vous souhaitiez étudier les effets du revenu, du statut familial et du sexe sur une série de variables dépendantes (bien sûr, cet exemple est grossièrement simplifié). En utilisant foreach
, cela peut être réalisé comme ceci:
foreach x in excl depr satisfont happy activ {
regress `x’ income i.famstat gender
}
Ceci va exécuter des analyses de régression des variables « excl », « depr » et ainsi de suite sur l’ensemble des variables indépendantes. Les noms de variables de la liste qui suit « foreach x » remplaceront successivement le x de la ligne qui commence par regression
. Au lieu de x, n’importe quel autre caractère ou chaîne de caractères pourrait être utilisé.
Veuillez noter deux choses : Premièrement, les accolades et leur placement. La liste des éléments de la liste est suivie d’une accolade ouvrante (sur la même ligne !). La ou les commandes à exécuter suivent sur la ou les lignes suivantes – en fait, plusieurs commandes peuvent suivre qui seront toutes répétées pendant que Stata travaille sur la liste des éléments de la liste. L’accolade fermante suit sur une ligne supplémentaire à la fin.
Deuxièmement, à l’intérieur des accolades, x (ou ce que vous pouvez utiliser à sa place) est entouré d’un accent grave, ou gravis, à gauche, et d’une apostrophe à droite. (Je viens d’apprendre que les programmeurs appellent cela backquote, backtick ou backgrave – à ne pas confondre avec backstop ). Notez que le manuel Stata (et d’autres sources Stata) fait référence à l’accent grave sous le nom de « single left quote », mais au moins sur les claviers QUWERTZ allemands (et pour les utilisateurs allemands qui utilisent des virgules pour les guillemets simples gauches), je pense qu’il est plus correct de parler de l’accent grave (ou gravis, en français : accent grave). Quoi qu’il en soit, regardez le glyphe de la commande ci-dessus – ce que vous voyez ici est correct, alors que le manuel Stata a souvent l’air trompeur (pour les utilisateurs allemands !).
La liste d’éléments qui suit foreach in
n’a pas besoin d’être une liste de variables ; ce peut être n’importe quelle liste d’éléments. Regardez l’exemple suivant qui est un cas particulier où ces éléments sont une série de chiffres. Si ce n’est pas le cas, restez avec foreach, mais sinon, procédez de la même manière.
Les boucles avec forvalues
Parfois, vous avez une situation où quelque chose, par exemple une liste de variables, est liée à une liste de nombres consécutifs. Voici un exemple réel tiré de mon travail récent (certains noms de variables plutôt maladroits ont été simplifiés ici). Dans les données d’enquête, on trouve souvent des informations sur les membres du ménage dans lequel vit la personne interrogée. Dans ce cas, les informations sur le statut actuel des membres étaient stockées dans les variables « hhms_2 » à « hhms_10 » (le premier membre du ménage est le répondant lui-même !). Je souhaitais créer, pour chaque membre du ménage, une variable muette indiquant s’il était employé ou non (les différents types d’emploi étant codés de 1 à 4). Une des nombreuses façons de le faire était:
forvalues i= 2/10 {
gen emp’i’ = inrange(hhms_`i’,1,4)
}
Les nombres 2 à 10 sont désignés par l’indice « i » dans cet exemple, mais au lieu de « i », vous pourriez utiliser n’importe quel caractère ou chaîne de caractères (comme, par exemple, « nombre »), ou même des chiffres. Dans la boucle, l’indice est entouré de l’accent grave (ou gravis) à gauche et de l’apostrophe à droite. Attention : Le premier accent grave, c’est-à-dire celui qui suit « emp », ressemble ici à une apostrophe en raison de quelques problèmes techniques que j’ai rencontrés, mais dans la vraie vie, il devrait toujours être un accent grave.
Le résultat est un certain nombre de nouvelles variables, appelées « emp2 » à « emp10 », avec des valeurs de 1 si le membre du ménage respectif est employé et 0 sinon.