2016-02-12 2 views
0

J'ai un ensemble de données de panel identifié par une variable d'id et une variable de chaîne spécifique avec des valeurs différentes pour chaque période (hebdomadaire). Tous les id ne sont pas représentés chaque semaine (les nouveaux peuvent venir et les plus anciens peuvent disparaître).définir une variable si les données du panneau prennent une valeur une fois

J'ai créé un mannequin lorsque cette variable contient un terme spécifique, mais il ne capture que l'aspect unique d'une semaine. Ce que je voudrais avoir, c'est que chaque identifiant ait une variable spécifique qui indique si le terme est contenu dans la variable chaîne dans au moins une occurrence d'une semaine. Donc, au cas où la semaine 34 id x contient le terme, je voudrais avoir un mannequin pour toutes les autres semaines, qui montre un "1", comme le terme était une fois contenue pour id x

J'ai essayé formatage comme xtset et le remplacement via F., mais cela n'a pas fonctionné comme prévu.

Répondre

1

Je pense que ce qui suit est ce que vous voulez, étant donné que vous avez déjà créé la variable term définie sur 1 si la chaîne contient le terme, et (je suppose) 0 sinon.

by id (time), sort: egen newterm = max(term) 
replace term = newterm 
drop newterm 

La commande by id (time), sort: ... exécutera le egen séparément pour chaque id. Le egen trouvera la valeur maximale de term pour chaque id, donc newterm sera de 1 le cas échéant term est 1.

+0

'bysort id (terme): REPLACE terme = terme [_N]' semble être une réduction de cela. –

+1

D'accord, mais je voudrais le suivre par 'trier le temps d'identification» pour le mettre dans l'ordre familier (ou du moins l'ordre qui m'est familier pour les données du panneau). –

+0

Merci! Je pense que je comprends la logique. Pour autant que je le comprenne, cela devrait aussi fonctionner si tous les (id) ne sont pas contenus dans chaque (temps) comme une observation. – user1783547