L'ajout d'observations avec des valeurs spécifiques pour la variable
Tout d'abord, jetez un oeil à certains variables de mon dataset:
firm_id year dyrstr Lack total_workers
2432 2002 1980 29
2432 2003 1980 23
2432 2005 1980 1 283
2432 2006 1980 56
2432 2007 1980 21
2433 2004 2001 42
2433 2006 2001 1 29
2433 2008 2001 1 100
2434 2002 2002 21
2434 2003 2002 55
2434 2004 2002 22
2434 2005 2002 24
2434 2006 2002 17
2434 2007 2002 40
2434 2008 2002 110
2434 2009 2002 158
2434 2010 2002 38
2435 2002 2002 80
2435 2003 2002 86
2435 2004 2002 877
2435 2005 2002 254
2435 2006 2002 71
2435 2007 2002 116
2435 2008 2002 118
2435 2009 2002 1165
2435 2010 2002 67
2436 2002 1992 24
2436 2003 1992 25
2436 2004 1992 22
2436 2005 1992 23
2436 2006 1992 21
2436 2007 1992 100
2436 2008 1992 73
2436 2009 1992 23
2436 2010 1992 40
2437 2002 2002 30
2437 2003 2002 31
2437 2004 2002 21
2437 2006 2002 1 56
2437 2007 2002 20
Les variables:
- firm_id est un identificateur pour les entreprises
- année est l'année de l'observation
- dyrstr est l'année de création d'une entreprise
- Manque est égal à 1 si il y a un manque d'observation de l'année précédente (par exemple, dans la troisième ligne du jeu de données, le Manque est égal à 1, car, pour l'entreprise, avec l'ID 2432, il n'y a pas d'observation de l'année 2004)
- total_workers est le nombre de travailleurs
J'aimerais combler les lacunes, à savoir que j'aimerais créer de nouvelles observations que je vous le montre dans la suite (en ne considérant que la firme avec l'ID 2432):
firm_id year dyrstr Lack total_workers
2432 2002 1980 29
*2432* *2004* *1980* *156*
2432 2003 1980 23
2432 2005 1980 1 283
2432 2006 1980 56
2432 2007 1980 21
La ligne où j'ai mis les valeurs des variables dans les astérisques est le nouvellement créé d'observation. Cette observation doit être une copie de l'observation précédente, mais avec quelques modifications.
- firm_id devrait rester le même que dans la ligne avant
- année devrait être l'année de la ligne précédente plus un
- dyrstr devrait rester le même que dans la ligne avant
- Manque: ici, il n'est pas question que la valeur de cette variable a
- total_workers est égal à 0.5*(valeur de l'observation précédente + la valeur de jours d'observation)
- toutes les autres variables de mon dataset (que je n'ai pas la liste ici) devrait rester la même que dans la ligne avant
J'ai lu quelque chose à propos de la commande expand
mais help expand
ne m'aide pas beaucoup. Espérons que l'un de vous peut m'aider!
- Si la gamme de l'année, le même pour toutes les entreprises (c'est à dire, idéalement, vous observez toutes les entreprises de 10 ans) ou à l'année de changement de gamme de l'entreprise?
- Bien que le logiciel Stata utilisateurs AFIN semblent heureux de vous aider avec ce genre de question, et je suis aussi, veuillez noter que, en général de Débordement de Pile dans les normes c'est pas une bonne question, il ne montre aucune tentative de vous fournir le code.
- Désolé pour ça!
- La gamme de l'année diffère d'une entreprise à l'.
Vous devez vous connecter pour publier un commentaire.
Mes suggestions de la charnière sur l'utilisation de
expand
, qui à son tour nécessite juste de l'information sur le nombre d'observations à ajouter. J'ignore votre variableLack
, comme Stata lui-même peut déterminer où sont les lacunes. Ma procédure d'imputationtotal_workers
est basée sur l'utilisation de la fonction intégrée de commandeipolate
, et, donc, le travail sur les lacunes de plus de 1 an, qui n'apparaissent pas dans votre exemple. Le nombre de travailleurs estimées n'est pas nécessairement un nombre entier.Pour d'autres méthodes d'interpolation, découvrez
cipolate
,csipolate
,pchipolate
, tous accessibles viassc desc cipolate
(ou l'équivalent).Ce genre d'opération dépend de l'obtention de
sort
ordre exact, dont je ne pense pas trivial, même avec de l'expérience, de sorte à obtenir le bon code pour des problèmes similaires, être préparé pour de faux départs; poivre votre code d'essai aveclist
états; et de travailler sur un bon jouet exemple de jeu de données (comme vous l'obligeance de nous fournis ici).Les travaux suivants, si, comme dans votre exemple de base de données, vous n'avez pas de années consécutives manquant pour une entreprise donnée. J'ai aussi assumer la variable
Lack
être numériques et le résultat final est un panel non équilibré (vous n'étiez pas précis sur ce point dans votre question).La
expand
ligne pourrait être réécrite commeexpand Lack + 1, gen(x)
, mais peut-être qu'il est plus clair de cette façon.Pour le cas plus général dans lequel vous ne ont années consécutives manquant, la suite devrait vous obtenir a commencé sous l'hypothèse que
Lack
spécifie le nombre d'années consécutives manquant. Par exemple, si il y a un saut de 2006 à 2009 pour une entreprise donnée, puisLack = 2
pour l'année 2009 de l'observation.Maintenant, il vous suffit de venir avec une règle d'imputation pour votre
total_workers
:Si
Lack
est une chaîne de caractères, de les convertir en numérique à l'aide dereal
.Vous avez déjà reçu la réponse, mais j'ai eu à faire la même avant et utilisez toujours la
cross
commande comme suit. Dire que je suis à l'aide de votre jeu de données déjà & continuer avec le code suivant:Puis à partir de là, utilisez le
ipolate
de commande dans l'esprit de @NickCox.Je suis particulièrement intéressé par les avantages/inconvénients quant à l'utilisation de
expand
etcross
. (Au-delà du fait que mon utilisation ici spécifiquement des charnières sur >0 enregistrements pour chaque année observée pour la construction de la traversée du dataset, qui pourrait être éliminé si je crée le`year'
tempfile différemment.)expand
etcross
: Une version antérieure de ma réponse utiliséfillin
, qui est lié àcross
, mais ensuite j'ai eu à faire ce que vous faites, retirez les observations ajouté au début et à la fin de la période qui ne leur appartenait pas. Elle vient en partie de style de préférence.