insheet using toto.txt toto.txt doit être un fichier délimité par des tabulations ou des ','
insheet using toto.txt, delimiter (";") si le délimiteur est autre chose (par exemple le ';')
Dans les deux cas insheet reconnait si la première ligne contient les noms des variables.
1) Merger sur un identifiant (id)
use fich2
sort id
save fich2, replace
use fich1
sort id
merge id using fich2
tabulate _merge
Dans ce cas fich2 est mergé à fich1 selon la clé 'id', tabulate _merge donne le résultat
2) Ajoute fich2 à la fin de fich1 (les variables doivent être les mêmes)
append using fich2
/* Faire une boucle simple: forval */
forval j=1/5 {
gen P`j'=Q`j'/tot
}
/* Faire une boucle sur les modalités d'une variable discrète: foreach */
vallist zemp, g(zemp)
forval j=1/5 {
foreach k in $zemp {
gen a`j'`k'=PGr`j' if zemp==`k'
egen b`j'`k'=max(a`j'`k')
format b`j'`k' %9.1f
drop a`j'`k'
}
}
/* Les traitements à l'intérieur d'un groupe: by et bysort */
La commande by permet de faire des traitements par groupe d'individu. Il vaut mieux utiliser bysort qui évite de trier le fichier avant.
bysort id : egen sum(achat) fait la somme des achats pour chaque id
bysort id type : egen sum(achat) fait la somme des achats pour chaque id par type de produit
bysort id (num): gen NbrTotalAchat=_N si num est le numéro d'ordre de l'achat, renvoie le dernier
Dans ce dernier cas Stata trie le fichier sur les deux variables spécifiées mais ne fait les traitements que par id.
/* Compter le nombre de produits uniques par individu */
bysort indiv: egen nbval=unique(produit)
/* Former toutes les combinaisons possibles entre variables */
selectvars cs trage sexe, min(2) max(2)
On peut ensuite récupérer la 'return list'
foreach v in `r(varlist)' {
regress mpg `v'
}
Ce qui produira l'exécution de 3 régressions à la suite
/* Supprimer les variables vides (sans observation) dans un fichier*/
foreach v of var _all {
sort `v'
if `v'[1]==`v'[_N] {
drop `v'
}
}
Voir aussi la commande - dropmiss -
/* Les sommes, en lignes, en colonnes, cumulées, totales... */
Soit id l'identifiant individuel, a le montant des achats de Mr id,
gen cum_a=sum(a) calcule cum_a la somme cumulée de a
egen tot_a=sum(a) calcule tot_a le montant total des achats
egen mean_a=mean(a) calcule mean_a le montant moyen des achats
bysort id: egen sumid_a=sum(a) calcule sumid_a le montant total des achants par individu
egen tot_abc=rsum(a b c) calcule tot_abc la somme en ligne de a b et c
+----------------------------------------------------------------+ | id a cum_a tot_a mean_a sumid_a b c tot_abc | |----------------------------------------------------------------| | 1 1 1 55 5.5 6 3 6 10 | | 1 2 3 55 5.5 6 5 10 17 | | 1 3 6 55 5.5 6 7 14 24 | | 2 4 10 55 5.5 9 9 18 31 | | 2 5 15 55 5.5 9 11 22 38 | |----------------------------------------------------------------| | 3 6 21 55 5.5 21 13 26 45 | | 3 7 28 55 5.5 21 15 30 52 | | 3 8 36 55 5.5 21 17 34 59 | | 4 9 45 55 5.5 19 19 38 66 | | 4 10 55 55 5.5 19 21 42 73 | +----------------------------------------------------------------+
/* Calculer une 'part d'achat' à partir d'un montant par produit */
Soit id l'identifiant individuel, b la nature de l'achat c le montant dépensé pour b,
+----------------------+
|id b c d |
|----------------------|
| 1 2 3 33.33333 |
| 1 5 6 66.66666 |
| 2 4 5 38.46154 |
| 2 6 8 61.53846 |
| 3 2 5 100 |
+----------------------+
+----------------------+
|id b c d |
|----------------------|
| 1 2 3 16.66667 |
| 1 5 6 83.33334 |
| 2 4 5 29.41176 |
| 2 6 8 70.58823 |
| 3 2 5 100 |
+----------------------+
/* Tester l'occurence d'un évènement parmis plusieurs variables: eqany */
Soit trois variables a b et c et on veut créer un indicateur z qui prend la valeur 1 si a b ou c
prennent certaines valeurs (1 4 9 ou 12) et 0 sinon.
egen z = eqany(a b c) , values(1 4 9 12)
+------------------+ | a b c z | |------------------| | 1 3 5 1 | | 2 4 6 1 | | 3 5 7 0 | | 4 6 8 1 | | 5 7 9 1 | |------------------| | 6 8 10 0 | | 7 9 11 1 | | 8 10 12 1 | | 9 11 13 1 | | 10 12 14 1 | +------------------+
/* Combien de temps prend mon programme? */
Pour connaître le temps d'exécution d'un programme il suffit d'afficher en début et en fin de programme la date et l'heure du système:
di "Programme débuté le $S_DATE à $S_TIME"
... puis à la fin
di "Programme achevé le $S_DATE à $S_TIME"
/* Créer une matrice à partir d'un tableau de fréquences */
Soit trois variables v1 v2 et v3 telles que:
+----------------+ | v1 v2 v3 | |----------------| | 2 100 101 | | 2 100 102 | | 2 100 104 | | 3 100 105 | | 2 100 106 | |----------------| | 3 100 125 | | 2 100 131 | | 2 100 138 | | 2 101 105 | | 2 101 106 | |----------------| | 3 101 125 | | 2 101 131 | | 2 102 104 | | 2 102 105 | | 2 102 106 | +----------------+
T[3,8]
101 102 104 105 106 125 131 138
100 2 2 2 3 2 3 2 2
101 0 0 0 2 2 3 2 0
102 0 0 2 2 2 0 0 0