Stata 6 : Que dois-je faire si la commande dont j’ai besoin ne peut pas être utilisée avec by ?
Title | Stata 6: Utilisation des boucles while lorsque la commande by n’est pas une option | |
Auteur | Jeremy B. Wernow, StataCorp |
Il existe plusieurs commandes dans Stata qui n’autoriseront pas la commande by en option. Deux exemples sont la commande tab1 et les commandes graph avec l’option saving(). Une façon de contourner cette fonctionnalité est de mettre la commande que vous souhaitez exécuter dans une boucle while:
Qui ne fonctionne pas. Nous savons cependant que rep78 a des valeurs comprises entre 1 et 5, essayons donc une boucle while dans un fichier do:
local i = 1 while `i' <=5 { tab1 mpg price if rep78 == `i' local i = `i' + 1 }
Voici la sortie de l’exécution de ce fichier:
Que se passe-t-il si rep78 a des valeurs manquantes? Dans ce cas, vous pouvez utiliser la commande egen pour créer une nouvelle variable qui catégorise chaque valeur dans rep78.
Voici le fichier do modifié:
local i = 1 egen y = group(rep78), missing while `i' <=6 { tab1 mpg price if y == `i' local i = `i' + 1 }
En utilisant l’option manquante avec la commande egen, les valeurs manquantes de rep78 seront codées avec une valeur de 6 (en rappelant que rep78 a des valeurs de 1 à 5). Notez que la sortie de ce fichier do contiendra désormais des tabulations pour mpg et le prix des valeurs manquantes de rep78.
Passons maintenant à un exemple plus difficile. Un utilisateur a récemment voulu utiliser la commande by avec la commande graph et l’option saving().
by ne peut pas être utilisé avec l’option graph, saving() en raison de problèmes de nommage (comment nommeriez-vous chaque graphique individuel?). Cela peut être résolu avec un autre fichier do:
local i = 1 egen y = group(rep78), missing while `i' <=6 { graph mpg price if y == `i', saving(graph`i',replace) local i = `i' + 1 }
La sortie de ce fichier do est
Qui a fonctionné comme nous le voulions.
Il y a beaucoup de choses que vous pouvez faire avec ce concept. Comme exemple final et encore plus complexe, le même utilisateur a également dit qu’il voulait utiliser l’option by() avec l’option saving(), en représentant celles-ci par rapport à une autre variable, et il en avait besoin pour une liste de variables. Cela semble probablement déroutant au début (et c’était le cas). Essentiellement, nous devions
par var1: graphe var2 var3, enregistrer (graphe) par (var4)
Plusieurs variables différentes devaient être utilisées à la place de var3.
La solution consiste à utiliser une commande for dans une boucle while. Voici un exemple utilisant l’ensemble de données automatique:
Cela se traduit par