2017-08-07 3 views
0
ID A1 A2 A3 
1001 ABD AAA ABC 
1002 ABE BBB CCC 
1003 ABC CCC DDD 

Ich habe eine Schleife wie folgt:Anzeige oder Druckschleifenvariable für Debug-Zwecke

generate trackr = 0 
display "generated trackr" 
foreach var of varlist a1 a2 a3{ 
    display "`var'" id[_n] 
    replace trackr = 1 if (`var'=="ABC") 
} 

In Stata, ich möchte herausfinden, und drucken, wenn eine Änderung an trackr vorgenommen wurde. (Ich möchte herausfinden, in welcher Zeile/Spalte "ABC" entdeckt wurde.)

Ich habe versucht, die oben genannten id[_n] und es funktioniert nur teilweise.

Ich möchte id[_n] anzeigen NUR if var=="ABC" und trackr ändert sich zu 1 (von 0). Ich habe versucht, alles in einen if Block zu setzen, aber ich denke, if in Stata funktioniert anders?

+0

Der Ausdruck "Bonus" ist gut für einen Lehrer, der Schüler herausfordert, nicht für Schüler, die einen Lehrer fragen! –

Antwort

0

Sie brauchen keine Schleife für das, was Sie zu haben scheinen. Siehe dataex von SSC für eine bessere Möglichkeit, Beispieldaten in Stata-Fragen zu geben.

clear 
input ID str3 (A1 A2 A3) 
1001 ABD AAA ABC 
1002 ABE BBB CCC 
1003 ABC CCC DDD 
end 

gen trackr = inlist("ABC", A1, A2, A3) 
list if inlist("ABC", A1, A2, A3) 

    +---------------------------------+ 
    | ID A1 A2 A3 trackr | 
    |---------------------------------| 
    1. | 1001 ABD AAA ABC  1 | 
    3. | 1003 ABC CCC DDD  1 | 
    +---------------------------------+ 

inlist() Hier ergibt 1, wenn eine der zweiten und späteren Argumente gleich dem ersten Argument ist, und 0 sonst.

In Ihrer Schleife zeigt etwas wie display A1[_n] nur Werte in der ersten Beobachtung, wenn Sie über Variablen, aber nicht über Beobachtungen laufen. Aber keine Schleife wird benötigt.

Wenn Sie nur die erste Beobachtung, um zu sehen, dass Ihr Kriterium, das zu tun ist

. list if trackr & sum(trackr) == 1 

    +---------------------------------+ 
    | ID A1 A2 A3 trackr | 
    |---------------------------------| 
    1. | 1001 ABD AAA ABC  1 | 
    +---------------------------------+ 

und es folgt eine Art und Weise erfüllt, daß list if sum(inlist("ABC", A1, A2, A3)) == 1 auch die erste derartige Beobachtung finden funktionieren würde.

+0

Danke Prof. Cox, das wird perfekt funktionieren! Werde in Zukunft Datex für Buchungsbeispiele suchen. –

+0

Ich denke, wenn ich durch die Stata-Dokumentation gehe, weiß ich manchmal nicht einmal, welche Funktion (en) ich suchen muss, genau das, was ich brauche. In diesem Fall war es inlist(). Das letzte Mal, als du mich auf bysort gezeigt hast (was etwas zu groupby passt). Wenn ich mehr datenbankähnliche Operationen ausführen möchte, die mit Schnittpunkten (2 Vektoren) zu komplexeren inneren und äußeren Verbindungen beginnen, wo würde ich beginnen, diese zu untersuchen? Mit anderen Worten, gibt es ein Glossar, das Stata-Funktionen auf häufig verwendete/bekannte Paradigmen aus anderen Sprachen abbildet (und umgekehrt)? –

+0

Umgekehrt wusste ich nicht, dass 'groupby' in einer Sprache, die Sie nicht angeben, in Stata ungefähr dasselbe ist wie" bysort ", außer dass Sie mir sagen, dass es das ist. Aber was Sie wollen, sind Stata-Übersetzungen von Begriffen, die Ihnen vertraut sind, und während ich mit Ihnen sympathisiere, weiß ich nicht, dass es ein solches Glossar gibt. Es gibt ein Buch über R für Stata-Benutzer, aber keiner der Autor ist oder war wirklich maßgebend für Stata, und ich habe ihn nie gelesen, und ich weiß nicht, wie nützlich er für Reverse Engineering sein könnte. Der positive Ratschlag besteht darin, manuelle Abschnitte zu überfliegen, die relevant sein können, z. B. Datenverwaltung oder Funktionen. –

Verwandte Themen