Ich spiele mit einer Übung der Textfindung in Stata.Suche nach Text in einer Zelle
clear
input id postid str7 text str3 referencedtext ref_postid
1 1 "XYZ ABC" "" .
1 2 "BCD ABC" "ABC" 1
1 3 "DCE" "" .
2 1 "XYZ" "" .
2 2 "ABC" "" .
2 3 "JKL" "" .
2 4 "JKL DEF" "JKL" 3
end
Ich versuche, was postid
im selben Thread zu finden, dass referencedtext
aus (das heißt, der ein Plakat Referenzierung gegeben ist) kommt, und erstellen Sie eine neue Variable ref_postid
die postid
die referenzierte Post bedeutet. Die referencedtext
kann alle ursprünglichen text
enthalten, auf die sie verweist, oder nur ein Stück. Es kann auch zu Unterschieden in der Kapitalisierung kommen, daher wäre es hilfreich, dies zu tun.
Dies ist, was ich verwendet:
gen ref_postid = .
qui bys id (postid) : sum postid
local postidmax= r(max)
qui forval i = 1/`postidmax' {
bys id (postid): replace ref_postid = postid[_n-`i'] if referencedtext == text[_n-`i'] & referencedtext != "" & postid != 1
}
@NickCox (1) und (2) waren Tippfehler, die jetzt behoben sind. (2) war ursprünglich kein Problem, aber ein Fehler ist aufgetreten, um Ihr Verständnis zu unterstützen. (3) ist ein Coding-Problem und ich bin offen für eine Lösung. (4) Weil, wie kann der ursprüngliche Beitrag in einem Thread etwas in einem Thread referenzieren, der nicht existiert? (logisch unmöglich). Der Text der Frage war von Anfang an klar und ich würde mir vorstellen, dass es ein gemeinsames Problem ist. – CJ12
@NickCox Der "Text der Frage war von Anfang an klar" ist die Aussage, die ich gemacht habe. Ich habe keine solche Aussage über den Code gemacht. Ohne meinen Versuch (was offensichtlich nicht funktioniert), aber ich versuche immer meinen eigenen Versuch zu machen, steht die Frage klar. Wie für (2) ist 3 die richtige Antwort, weil 'id == 2 & postid == 4' 'referenzierter Text == JKL' hat, was nur innerhalb der 'id == 2' zu sehen ist, wenn 'postid == 3' – CJ12
@NickCox Nun, das hin und her hat mir geholfen, die Antwort abzuleiten, also vielen Dank – CJ12