Introduction à Stata: Création et modification de variables

Ceci est la sixième partie de Introduction à Stata. Si vous êtes nouveau sur Stata, nous vous recommandons fortement de commencer dès le début.

Passez au contenu suivant cette vidéo

Cet article vous apprendra les bases de la création de nouvelles variables, de la modification de variables existantes et de la création d’étiquettes.

Generate and Replace

Les commandes principales pour créer et modifier des variables sont generate (généralement abrégé gen) et replace (qui, comme les autres commandes pouvant détruire des informations, n’a pas d’abréviation). gen crée de nouvelles variables ; replace modifie les valeurs des variables existantes. Leur syntaxe de base est identique:

gen variable=expression

ou

replace variable=expression

où variable est le nom de la variable que vous souhaitez créer ou modifier, et expression est l’expression mathématique dont vous souhaitez y mettre le résultat. Les expressions peuvent être aussi simples qu’un seul nombre ou impliquer toutes sortes de fonctions compliquées. Vous pouvez explorer les fonctions disponibles en tapant fonctions d’aide. Si l’expression dépend d’une valeur manquante à un moment donné, le résultat est manquant. Habituellement, c’est exactement ce à quoi vous vous attendez et que vous souhaitez.

Il est particulièrement important d’utiliser des fichiers do lorsque vous modifiez vos données, alors commencez par créer un fichier do qui charge l’ensemble de données automatique:

capture log close
log à l’aide de vars.log, replace
tout effacer
sysuse auto

Les prix dans l’ensemble de données auto sont en dollars 1978, il pourrait donc être utile de les convertir en dollars 2020. Pour ce faire, vous devez multiplier les prix par un facteur de conversion qui est l’Indice des Prix à la consommation en 2020 divisé par l’Indice des Prix à la consommation en 1978, soit environ 4. Le code sera:

gen price2020 =price *4

Ajoutez cette ligne à votre fichier do, exécutez-la et examinez les résultats avec:

parcourir make price price2020

Les prix sont toujours généralement inférieurs à ceux que vous verriez chez un concessionnaire automobile, mais c’est probablement parce que les voitures d’aujourd’hui sont beaucoup plus agréables que les voitures de 1978. C’est un bon exemple de la façon de vérifier votre travail: comparez ce que vous avez obtenu à ce que vous attendiez, et s’ils ne correspondent pas, assurez-vous de savoir pourquoi!

En interne, Stata a exécuté une boucle: il a calculé le prix * 4 pour la première observation et stocké le résultat dans price2020 pour la première observation, puis calculé le prix * 4 pour la deuxième observation et stocké le résultat dans price2020 pour la deuxième observation, et ainsi de suite pour toutes les observations de l’ensemble de données. Vous apprendrez à étirer ce paradigme d’une observation à la fois dans la lutte contre les données dans Stata, mais les tâches qui le brisent (comme les moyens de calcul) nécessitent une approche différente dont nous parlerons bientôt.

Supposons que nous voulions être un peu plus précis et utiliser 4.14 comme facteur de conversion. Vous pourriez être tenté d’essayer d’ajouter du code qui « corrige » la variable price2020 (par exemple, en la multipliant par 4,14 / 4). Mais il est plus simple et plus propre de corriger le code qui l’a créé en premier lieu. Changez:

gen price2020 = price *4

en:

gen price2020 =price *4.14

et exécutez à nouveau le fichier do. Parce que votre fichier do charge les données d’origine à partir du disque chaque fois qu’il est exécuté, il peut simplement créer la variable price2020 comme il se doit.

Avoir à la fois price et price2020 vous a permis de comparer leurs valeurs et de vérifier votre travail. Mais si vous ne souhaitez travailler qu’avec des dollars 2020 et que vous êtes sûr d’avoir la bonne formule, vous pouvez utiliser la commande replace pour modifier la variable de prix existante au lieu d’en créer une nouvelle:

replace price= price *4.14

Exécutez cette version et vous obtiendrez le message (74 modifications réelles apportées). Étant donné que l’ensemble de données contient 74 observations, cela vous indique que toutes ont été modifiées, comme vous vous en doutez. Une fois que vous commencez à inclure les conditions if, le nombre d’observations réellement modifiées peut être une information très utile.

Exercice: En dehors des États-Unis, le rendement énergétique est souvent mesuré en litres par kilomètre (notez que comme le carburant utilisé est au numérateur, un faible nombre est bon). Pour convertir les miles par gallon en litres par kilomètre, multipliez l’inverse de mpg (1 / mpg) par 2,35. Créez une variable qui stocke le rendement énergétique de chaque voiture en litres par kilomètre.

Création de variables avec des conditions If

Aller au contenu suivant cette vidéo

Si une commande gen a une condition if, la variable résultante existera (et doit) toujours pour toutes les observations. Cependant, une valeur manquante lui sera attribuée pour les observations où la condition if n’est pas vraie. Si une commande replace a une condition if, les observations où la condition if n’est pas vraie resteront inchangées. Cela vous permet de définir des variables sur des valeurs différentes pour différentes observations.

Supposons que vous vouliez réduire l’échelle de cinq points de la variable rep78 en une échelle de trois points. Ajoutez le code suivant à votre fichier do pour le faire:

génération rep3= 1 si rep78 <3
remplacer rep3=2 si rep78 == 3
remplacer rep3=3 si rep78 >& rep78 <.

La première ligne crée la nouvelle variable rep3, mais ne la définit que sur une pour les cas où rep78 est inférieur à trois. Les autres ont disparu. La deuxième ligne change certains de ces manquements en deux, et la troisième en change plus en trois. Exécutez le fichier do, notez le nombre d’observations modifiées par chaque ligne et comparez-le au nombre total d’observations dans l’ensemble de données.

Quelle sera la valeur de rep3 pour les observations où rep78 est manquant ? Manquant, comme il se doit, car il n’a jamais été réglé sur autre chose. Les cinq observations pour lesquelles rep78 est manquant étaient implicitement ou explicitement exclues des trois commandes, elles ont donc commencé avec une valeur manquante pour rep3 et n’ont jamais été modifiées. (Si vous avez oublié d’exclure les valeurs manquantes de la dernière commande, rep3 serait trois pour les voitures où rep78 est manquant, une erreur trop courante. Rappelez-vous, manquer est essentiellement l’infini.)

Exercice: Combiner les uns et les deux est logique car il y en a si peu, mais il n’y avait pas de besoin particulier de combiner les quatre et cinq. Créez une variable rep4 qui combine les uns et les deux et renumérote les autres catégories en conséquence (c’est-à-dire que rep4 devrait passer de un à quatre).

Recode

Passez au contenu suivant cette vidéo

La commande recode vous donne une autre façon de créer rep3. Il est conçu uniquement pour les tâches de recodage et est beaucoup moins flexible que gen and replace. Mais c’est très facile à utiliser. La syntaxe est:

recode var(règle 1) (règle 2) (plus de règles au besoin…), gen(newvar)

L’option gen à la fin n’est pas requise — si elle n’est pas là, la variable d’origine sera modifiée plutôt que de créer une nouvelle variable avec les nouvelles valeurs. Vous pouvez également recoder une liste de variables, en les recodant toutes de la même manière.

Le cœur de la commande recode est une liste de règles, chacune entre parenthèses, qui lui indiquent comment une variable doit être recodée. Ils prennent la forme (inputValue = outputValue). La valeur d’entrée peut être un seul nombre, une liste de nombres séparés par des espaces ou une plage de nombres spécifiée avec début/fin. La valeur de sortie sera toujours un seul nombre. Tout ce qui n’est pas couvert par une règle reste inchangé, vous pouvez donc utiliser recode pour modifier quelques valeurs d’une variable ou la redéfinir complètement comme nous le faisons ici. Voici une version de recodage de la conversion de rep78 en une échelle à trois points:

recode rep78 (1 2 = 1) (3 = 2) (4 5 = 3), gen(rep3b)

Les valeurs manquantes ne nécessitent aucune manipulation particulière: comme missing n’a pas été répertorié dans les valeurs d’entrée d’une règle, les observations avec des valeurs manquantes ne sont pas modifiées.

Exercice: Créez rep4b, en combinant uniquement les deux et les deux comme ci-dessus, en utilisant recode.

Variables indicatrices

Aller au contenu suivant cette vidéo

En créant des variables indicatrices, vous pouvez profiter du fait que Stata traite true comme un et false comme zéro en définissant la nouvelle variable égale à une condition. Considérez :

gen lowMPG=(mpg <20)

(Les parenthèses sont facultatives, mais facilitent la lecture.) Cela crée une variable indicatrice appelée lowMPG qui est un (vrai) pour les voitures où mpg est inférieur à vingt et zéro (faux) où mpg est supérieur ou égal à vingt. Pour voir les résultats, exécutez le fichier do, puis tapez parcourir make mpg si lowMPG.

Aucune voiture n’a de valeur manquante pour mpg, mais si c’était le cas, le code ci-dessus lui attribuerait un zéro pour lowMPG comme si elle était connue pour avoir une bonne consommation d’essence. La variable lowMPG devrait être manquante pour de tels cas, ce que vous pouvez faire avec :

gen lowMPG=(mpg <20) si mpg <.

Exercice: Créez une variable indicatrice qui identifie les voitures ayant de bons dossiers de réparation (définie comme rep78 supérieure à 3). Comment votre code changerait-il si la variable d’indicateur était nécessaire pour identifier les voitures connues pour avoir de bons dossiers de réparation?

Variables de chaîne

Aller au contenu suivant cette vidéo

Les commandes gen et replace fonctionnent également avec des variables de chaîne. Les expressions sur le côté droit du signe égal ne sont pas mathématiques, mais elles suivent des règles similaires. Les valeurs de chaîne sont toujours entre guillemets, donc si vous vouliez stocker la lettre x dans une variable appelée x, vous diriez gen x = « x ». Stata ne trouverait pas cela déroutant (bien que vous puissiez le faire) car x entre guillemets (« x ») signifie la lettre x et x sans guillemets signifie la variable x.

L’addition pour les chaînes est définie comme mettant une chaîne après l’autre, donc « abc » + »def » = »abcdef ». Mais la plupart du travail avec les chaînes est effectué par des fonctions spéciales qui prennent des chaînes en entrée (valeurs de chaîne ou variables contenant des chaînes) et renvoient des chaînes en sortie.

La variable make enregistre réellement deux informations : le nom de l’entreprise qui a produit la voiture et le nom du modèle de voiture. Vous pouvez facilement extraire le nom de l’entreprise à l’aide de la fonction word():

gen company=word(make, 1)

Pour voir les résultats, exécutez le fichier do et tapez browse make company. La première entrée, ou argument, de la fonction word() est la chaîne sur laquelle agir (dans ce cas une variable contenant des chaînes). Le second est un nombre lui indiquant le mot que vous voulez. La fonction casse la chaîne d’entrée en mots en fonction des espaces qu’elle contient et renvoie celui que vous avez demandé, dans ce cas le premier.

Nous en dirons beaucoup plus sur les fonctions de chaîne dans les données de texte (à venir), mais si vous êtes impatient de commencer, vous pouvez faire beaucoup avec les fonctions suivantes:

word() Extrait un mot d’une chaîne
strpos() Vous indique si une chaîne contient une autre chaîne, et si oui sa position
substr() Extrait des parties d’une chaîne
subinstr() Remplace une partie d’une chaîne par autre chose
length() Vous indique la longueur d’une chaîne (combien de caractères elle contient)

Tapez help puis le nom d’une fonction dans le fichier fenêtre Stata principale pour apprendre comment cela fonctionne.

Exercice: Créez une variable de modèle contenant le nom du modèle de voiture (c’est-à-dire le reste de la marque). Votre code doit pouvoir gérer des noms de modèle longs d’un ou deux mots.

Conversion de variables de chaîne en Variables numériques

Aller au contenu suivant cette vidéo

Parfois, une variable qui devrait être numérique est entrée dans Stata sous forme de chaîne. Vous pouvez résoudre ce problème avec la commande destring, qui convertit une variable de chaîne contenant des nombres en une variable numérique. La syntaxe est simplement destring variable, replace, où la variable doit être remplacée par le nom de la variable (ou des variables) à détruire. Si la variable string contient autre chose que des nombres, vous pouvez ajouter l’option force pour dire à Stata de la convertir de toute façon, mais les observations avec des caractères non numériques obtiendront une valeur manquante. Notez que les « caractères non numériques » incluent les signes dollar et les virgules!

En général, si vous devez utiliser l’option force, c’est parce que Stata n’est pas sûr que ce que vous faites soit une bonne idée, et vous devriez bien réfléchir avant de le faire. Dans ce cas, vous devriez examiner les caractères non numériques pour voir s’il serait logique de les supprimer d’abord (comme ces signes et virgules en dollars) ou si la variable n’est pas vraiment que des nombres après tout.

Cet ensemble de données n’a pas de variables à détruire, alors faisons-en une:

gen x = »5″

Notez comment les guillemets autour de « 5 » signifient que x est une variable de chaîne contenant le caractère 5, pas une variable numérique contenant la valeur 5. Juste pour compliquer les choses, changeons certaines des valeurs de x en texte réel:

replace x = »missing » si étranger

Essayez maintenant de détruire x:

destring x, replace

Stata refusera, car certaines des valeurs de x ne peuvent pas être converties en nombres. Mais les valeurs qui ne peuvent pas être converties sont « manquantes », il est donc tout à fait approprié de les convertir en valeurs manquantes. Essayez donc à nouveau avec l’option force:

détring x, remplacez force

Maintenant Stata convertira x en une variable numérique, avec quelques valeurs manquantes.

Egen

Passez au contenu suivant cette vidéo

La commande egen, abréviation de « génération étendue », vous donne accès à une autre bibliothèque de fonctions. C’est un peu un hodge-podge, mais les fonctions egen que vous utiliserez le plus calculent les statistiques récapitulatives:

Name Description
min() Minimum value
max() Maximum value
mean() Mean
median() Median
sd() Standard Deviation
total() Total

These are examples of aggregate functions: they take multiple numbers as input and return a single number as output. Ils fonctionnent également à travers les observations, et ne peuvent donc pas être facilement réalisés en utilisant gen car cela fonctionne une observation à la fois. La syntaxe semble presque identique à gen:

egen variable=function()

La grande différence avec egen est que vous n’écrivez pas votre propre expression mathématique; vous utilisez simplement une fonction de la bibliothèque. Par exemple, si vous deviez définir une variable sur une moyenne divisée par deux, vous ne pouvez pas dire egen y = moyenne (x)/2. Vous devez d’abord exécuter egen y = mean(x), puis remplacer y = y/ 2.

Une autre différence importante est la façon dont les valeurs manquantes sont traitées. Rappelez-vous qu’avec gen, si une partie de l’entrée manquait, la sortie serait manquante. Cependant, egen ignore simplement les valeurs manquantes et calcule le résultat en utilisant les données disponibles. Habituellement, c’est ce que vous voulez, mais vous devez être conscient de ce que fait egen et être sûr que cela a du sens pour votre tâche particulière.

Les fonctions egen pour calculer les statistiques récapitulatives sont très couramment combinées avec by pour calculer les statistiques récapitulatives pour les groupes. Calculez le prix moyen de la voiture pour chaque entreprise, puis affichez les résultats avec:

bysort company: egen meanPrice = mean(price)
tab company, sum(meanPrice)

Rappelons que bysort company: trie d’abord les données par entreprise, puis exécute la commande egen suivante séparément pour chaque entreprise.

Les zéros de l’écart type reflètent le fait que chaque voiture produite par la même entreprise a la même valeur de prix moyen. C’est parce que meanPrice décrit l’entreprise, pas la voiture. En fait, c’est la définition d’une variable qui décrit un groupe : chaque unité d’un même groupe doit avoir la même valeur de la variable.

Si nous avions seulement voulu voir la valeur moyenne du prix pour chaque entreprise, nous aurions pu simplement exécuter:

tab company, sum(price)

Mais après avoir exécuté egen, nous avons maintenant la moyenne dans une variable, disponible pour utilisation.Exercice : Créez une variable contenant la valeur moyenne de rep78 pour chaque entreprise. Examinez ensuite les fréquences de rep78 au sein de chaque entreprise en créant une table bidirectionnelle avec tab. Assurez-vous d’inclure les valeurs manquantes. Lincoln et Olds ont la même moyenne; pensez-vous que cela résume bien la distribution de rep78 pour les deux sociétés? Considérons ensuite les valeurs manquantes: supposons que la valeur réelle de rep78 pour les voitures avec des valeurs manquantes ait été révélée. Que devraient-ils être pour que ces moyens ne changent pas? Est-ce plausible?

Étiquettes

Passez au contenu suivant cette vidéo

De bonnes étiquettes rendent vos données beaucoup plus faciles à comprendre et à utiliser. Bien que Stata propose de nombreux types d’étiquettes, nous nous concentrerons sur les plus courantes et les plus utiles: les étiquettes variables et les étiquettes de valeur.

Étiquettes de variables

Les étiquettes de variables transmettent des informations sur une variable et peuvent remplacer les noms de variables longs. Cet ensemble de données a déjà un bon ensemble d’étiquettes de variables, comme vous pouvez le voir dans la fenêtre Variables. Le seul qui prête à confusion est l’étiquette sur foreign, alors modifiez-la à l’aide de la commande variable label. La syntaxe pour définir une étiquette de variable est la suivante:

variable d’étiquette Nom variable « étiquette »

Tapez donc:

variable d’étiquette étrangère « Origine de la voiture »

Regardez à nouveau la fenêtre des variables pour voir les résultats.

Étiquettes de valeur

Les étiquettes de valeur sont utilisées avec des variables de catégorie pour vous indiquer la signification des catégories. Nous en avons vu un en action avec la variable étrangère: ce sont les étiquettes de valeur qui nous ont dit qu’un 0 signifie « Domestique » et un 1 signifie « Étranger. »

Explorons les étiquettes de valeur en étiquetant les valeurs de rep3, la nouvelle variable que nous avons recodée pour réduire rep78 d’une échelle de cinq points à une échelle de trois points. Les étiquettes de valeur sont un mappage d’un ensemble d’entiers à un ensemble de descriptions de texte, la première étape consiste donc à définir la carte. Pour ce faire, utilisez la commande label define :

label define mapName value1 « label1 » value2 « label2″…

Ainsi:

label define replabel 1 « Mauvais » 2 « Moyen » 3 « Bon »

Cela crée un mappage appelé replabel mais ne l’applique à rien. Avant de faire quelque chose d’utile, vous devez dire à Stata d’étiqueter les valeurs de la variable rep à l’aide du mappage de replabel que vous venez de définir. La syntaxe est la suivante:

valeurs d’étiquette variable map

Et donc:

valeurs d’étiquette rep3 replabel

Pour voir les résultats, exécutez:

liste make rep3

Une fois qu’une carte est définie, vous pouvez l’appliquer à n’importe quel nombre de variables: remplacez simplement la variable unique dans la commande valeurs d’étiquette ci-dessus par une liste de variables. Supposons que vous travailliez avec des données d’enquête et que vos variables incluent le sexe du répondant, le sexe du conjoint du répondant et le sexe de tous les enfants du répondant. Vous pouvez définir une seule carte appelée gender, puis l’utiliser pour étiqueter les valeurs de toutes les variables de genre.

Trois commandes pour gérer les étiquettes de valeur : label dir vous donne une liste de toutes les étiquettes définies, et label list vous indique ce qu’elles signifient. La commande describe vous indique le nom des étiquettes de valeur associées à chaque variable (parmi beaucoup d’autres choses utiles).

Exercice: Créez des étiquettes de valeur pour rep4 et appliquez-les. N’hésitez pas à décider comment décrire les niveaux.

Étiquettes via Recode

Lorsque vous utilisez recode pour créer une nouvelle variable, Stata créera automatiquement une étiquette de variable pour celle-ci (« RECODE of… »). Vous pouvez également définir des étiquettes de valeur en plaçant l’étiquette souhaitée pour chaque valeur à la fin de la règle qui la définit. Créez une autre version de rep3, cette fois avec des étiquettes dès sa création, avec:

recode rep78(1 2= 1 « Mauvais »)(3= 2 « Moyen ») (4 5=3 « Bon »), gen(rep3c)

Exercice: Créez un rep4c à l’aide de recode, en définissant des étiquettes de valeur pour celui-ci.

Ce fichier do modifie l’ensemble de données qu’il utilise, il doit donc enregistrer la nouvelle version. N’oubliez pas de ne jamais enregistrer votre sortie sur votre entrée, alors n’enregistrez pas les nouvelles données en tant qu’auto. Si vous le faisiez, vous ne pouviez plus exécuter ce fichier do: il se bloquerait lorsqu’il essayerait de créer price2020 car cette variable existerait déjà dans l’ensemble de données modifié. Au lieu de cela, enregistrez les données en tant qu’autoV2, comme dans la « version 2 de l’ensemble de données automobile. »

enregistrer autoV2, remplacer

Enfin, fermez le journal:

log close

Cela nous amène à la fin de l’introduction à Stata. Nous espérons que cela vous a été utile. Pour en savoir plus, pensez à lire les querelles de données dans Stata ou les autres contenus de la Base de connaissances en informatique statistique du SSCC.

Dernière révision : 27/05/2020

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.