So benennen Sie viele Variablen mit string-Suffixen
In Stata, habe ich eine Reihe von Variablen, die alle beginnen mit pkg
. In Ihren aktuellen Zustand, Ihre enden sind numerisch: pkg1
, pkg2
, pkg3
, pkg4
und so weiter.
Ich ändern müssen alle diese Variablen' Endungen an Saiten: pkgmz
, pkggmz
, pkgsp
, pkgsptc
etc.
Ich habe eine Spalte mit dieser Zeichenfolge enden, die kann ich benennen als eine lokale Liste.
Beispiel:
local croplist mz gmz sp sptc mil cof suk tea ric
Wie ändere ich die numerischen Endungen an den string-enden?
Meine Vermutung auf den code finden Sie weiter unten und die ???
anzugeben, wo ich bin ratlos:
local croplist crops mz gmz sp sptc mil cof suk tea ric
foreach x of varlist pkg* {
local new1 = substr(`x', 1, 3)
local new2 = ???
rename `x' ``new1'`new2''
label var ``new1'`new2'' "Avg district level `new2' price"
}
Frage ich mich, ob es besser wäre, zu nutzen regexr()
Befehl, aber kann nicht denken, ein Weg, um es aufzunehmen.
Jede Hilfe ist willkommen.
InformationsquelleAutor ben | 2012-12-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine Notwendigkeit Sie hier zum aufrufen von regulären Ausdrücken. Sie haben die neue Suffixe; das Präfix
pkg
ist immer die gleiche, damit die Arbeit der Extraktion wiederholt ist überflüssig. Der Kern des Problems ist das Radfahren über zwei Listen auf einmal. Hier ist ein Weg, um fix-code.Beachten Sie auch
rename
in Stata 12+ kann damit umgehen;regexr()
ist eine Funktion, nicht ein Befehl, eine breitere Diskussion in http://www.stata-journal.com/sjpdf.html?articlenum=pr0009 (ein wenig out-of-date, aber die entsprechenden auf die wichtigste Frage); Sie haben zu viele Anführungszeichen, die auf Ihremrename
Befehl, so dass es nicht funktionieren würde.BEARBEITEN 30. Juli 2018
Tendiere ich nun öfter verwenden
gettoken
:Den lokalen makro -
croplist
ist ein Stapel. Jedes mal um die Schleife nehmen wir das oberste Element vom stack und überlassen Sie den rest für das nächste mal.Jedes mal um die Schleife
Cox Du hast erwähnt, dass die
rename
- Befehl in Stata 12+ kann damit umgehen. Ist es möglich, dies zu tun in einem einzigenrename
Befehl? Ich stellte eine Antwort mit ein paar Optionen mit dem Befehl neu, aber ich konnte nicht herausfinden, ob es möglich war, einen einzigen Anruf.A Es ist möglich, tun Sie es mit einem Befehl, aber die einzige Antwort, die mir einfällt, ist nicht verpflichtend.
rename (pkg1-pkg9 ) (pkgmz pkggmz pkgsp pkgsptc pkgmil pkgcof pkgsuk pkgtea pkgric)
Dennoch bleibt es wahr, dass die Menschen verbringen Minuten versucht zu denken, bis ein cleverer trick, wenn Sie den Namen eingegeben wurde, in Sekunden.InformationsquelleAutor Nick Cox
Hier ist ein weiterer Weg, es zu tun.
tokenize
stellt einzelne Wörter in Makros nummeriert von 1 bis. Die verschachtelte Referenz``j''
behandelt, so in der elementaren algebra: bewerten Sie die innen-makro-Referenz.Das wäre gut, wenn die zahlen aufeinander Folgen. Wie sich herausstellt, in meinem Fall die zahlen sind nicht aufeinander folgenden (obwohl ich dachte, Sie waren, als Zitat meine Frage). Also ich gebe den Scheck an Nick ' s erste Antwort. Aber beide sind sehr nützlich.
InformationsquelleAutor Nick Cox
Ben fragte in einem Kommentar über die Inkrementierung der Zähler findet in lokalen Makros.
Stata lokale Makros sind im Allgemeinen für das halten von strings; string
Charaktere können numerisch sein, so holding-Nummern ist ein besonderer Fall, aber
natürlich sehr nützlich. Dieser thread hat allein gezeigt, mehrere
Beispiele. Es hilft zu halten, dass die Geschichte in den Sinn. Eine langjährige syntax
basiert auf den Formen
und
Die erste form von Kopien zu
macname
während die zweite formausgewertet wird, bevor die Zuordnung der Ergebnisse zu
macname
. Diewichtigste Weg, um den Inkrement-Zähler wurde für mehrere Versionen
aber die syntax
ist jetzt erlaubt. Jedoch, obwohl erlaubt
nicht so funktionieren, wie Sie erwarten können, obwohl das, was passiert ist, im Einklang mit
die erste syntax für Makros.
Also, wenn, das sieht ein wenig seltsam, da Ihre Hintergründe, das ist
verständlich, aber die lokalen Makros waren bestimmt für die string-Verarbeitung,
nicht arithmetische. Mata ist viel mehr mainstream-wie in dieser Hinsicht.
Schrieb ich ein tutorial über Schleifen und Makros in
Cox, N. J. 2002. Wie Sie sich Listen mit Stärke. Stata Journal 2(2):
202-222
die für alle zugänglich auf
http://www.stata-journal.com/sjpdf.html?articlenum=pr0005
InformationsquelleAutor Nick Cox
Ab Stata 12+,
rename
verarbeiten kann, in diesem Fall in mehrfacher Hinsicht.Diese Methode erstellt ein neues makro
new_croplist
mit Variablen Namenpkgmz pkggmz pkgsp pkgsptc pkgmil pkgcof pkgsuk pkgtea pkgric
, dann nutztrename
umbenennen von Variablen nach dem Musterpkg<digits>
dem angegebenen Namen innew_croplist
. Die folgenden zahlenpkg
müssen nicht aufeinander folgend sein.Eine zweite Methode verwendet die neue
rename
Funktion zweimal; nach wie vor erfordert keine aufeinander folgenden zahlen in die ursprünglichen Namen. Der erste Befehl benennt die Variablen des patternpkg<digits>
dem angegebenen Namen incroplist
. Der zweite Befehl fügt den Präfixpkg
zu den neuen Variablen-Namen.In beiden Fällen, und im Allgemeinen bei der Verwendung der
rename
Kommando (bezeichnet alsrename group
in Stata Dokumentation), die Anzahl der alten Namen der Variablen muss mit der Anzahl der neuen Variablen-Namen, so stellen Sie sicher, dass die Anzahl der Variablen, ergänzt durchpkg#
entspricht der Anzahl von neuen Namen angegeben `croplist'.InformationsquelleAutor Michael A
Alternative zu mit einem Zähler, wie in @Nick hervorragendes Beispiel, ist zu beschäftigen
macro shift
:Können Sie auch die
ds
Befehl erhalten Sie eine Liste von Variablennamen, beginnend mitpkg
:In beiden Fällen bekommen Sie:
InformationsquelleAutor Pearly Spencer