Einführung in Stata: Erstellen und Ändern von Variablen

Dies ist Teil sechs der Einführung in Stata. Wenn Sie neu in Stata sind, empfehlen wir dringend, von vorne zu beginnen.

Zum Inhalt springen Im Anschluss an dieses Video

In diesem Artikel lernen Sie die Grundlagen zum Erstellen neuer Variablen, Ändern vorhandener Variablen und Erstellen von Beschriftungen kennen.

Generieren und Ersetzen

Die primären Befehle zum Erstellen und Ändern von Variablen sind generate (normalerweise abgekürzt gen) und replace (die wie andere Befehle, die Informationen zerstören können, keine Abkürzung haben). gen erstellt neue Variablen; replace ändert die Werte vorhandener Variablen. Ihre Kernsyntax ist identisch:

gen variable = expression

oder

replace variable = expression

wobei variable der Name der Variablen ist, die Sie erstellen oder ändern möchten, und expression der mathematische Ausdruck ist, dessen Ergebnis Sie einfügen möchten. Ausdrücke können so einfach wie eine einzelne Zahl sein oder alle möglichen komplizierten Funktionen beinhalten. Sie können untersuchen, welche Funktionen verfügbar sind, indem Sie Hilfefunktionen eingeben. Wenn der Ausdruck an einem beliebigen Punkt von einem fehlenden Wert abhängt, fehlt das Ergebnis. Normalerweise ist dies genau das, was Sie erwarten und wollen.

Es ist besonders wichtig, do-Dateien zu verwenden, wenn Sie Ihre Daten ändern. Erstellen Sie daher zunächst eine do-Datei, die den automatischen Datensatz lädt:

capture log close
log using vars.log, replace
clear all
sysuse auto

Die Preise im Auto-Datensatz sind in 1978-Dollar angegeben, daher kann es nützlich sein, sie in 2020-Dollar umzurechnen. Dazu müssen Sie die Preise mit einem Umrechnungsfaktor multiplizieren, der der Verbraucherpreisindex im Jahr 2020 geteilt durch den Verbraucherpreisindex im Jahr 1978 oder etwa 4 ist. Der Code wird sein:

gen price2020 = price*4

Fügen Sie diese Zeile zu Ihrer do-Datei hinzu, führen Sie sie aus und untersuchen Sie die Ergebnisse mit:

durchsuchen make price price2020

Die Preise sind im Allgemeinen immer noch niedriger als bei einem Autohaus, aber das liegt wahrscheinlich daran, dass die heutigen Autos viel schöner sind als die Autos von 1978. Dies ist ein gutes Beispiel dafür, wie Sie Ihre Arbeit überprüfen können: Vergleichen Sie, was Sie bekommen haben, mit dem, was Sie erwartet haben, und wenn sie nicht übereinstimmen, stellen Sie sicher, dass Sie wissen, warum!

Intern hat Stata eine Schleife ausgeführt: es berechnete price * 4 für die erste Beobachtung und speicherte das Ergebnis in price2020 für die erste Beobachtung, berechnete dann price * 4 für die zweite Beobachtung und speicherte das Ergebnis in price2020 für die zweite Beobachtung usw. für alle Beobachtungen im Datensatz. Sie werden lernen, wie Sie dieses Paradigma einer Beobachtung nach der anderen beim Daten-Wrangling in Stata ausdehnen können, aber Aufgaben, die es brechen (wie das Berechnen von Mitteln), erfordern einen anderen Ansatz, über den wir bald sprechen werden.

Angenommen, wir wollten etwas genauer sein und 4.14 als Umrechnungsfaktor verwenden. Sie könnten versucht sein, Code hinzuzufügen, der die Variable price2020 „repariert“ (z. B. multipliziert mit 4,14 / 4). Aber es ist einfacher und sauberer, den Code zu reparieren, der ihn überhaupt erstellt hat. Ändern Sie:

gen price2020 = price*4

in:

gen price2020 = price*4.14

und führen Sie die do-Datei erneut aus. Da Ihre do-Datei bei jeder Ausführung die Originaldaten von der Festplatte lädt, kann sie die Variable price2020 einfach so erstellen, wie sie sein sollte.

Wenn Sie sowohl price als auch price2020 haben, können Sie deren Werte vergleichen und Ihre Arbeit überprüfen. Wenn Sie jedoch nur mit 2020-Dollars arbeiten möchten und sicher sind, dass Sie die richtige Formel haben, können Sie mit dem Befehl replace die vorhandene Preisvariable ändern, anstatt eine neue zu erstellen:

replace price = price*4.14

Führen Sie diese Version aus und Sie erhalten die Meldung (74 echte Änderungen vorgenommen). Da der Datensatz 74 Beobachtungen enthält, bedeutet dies, dass alle wie erwartet geändert wurden. Sobald Sie mit IF-Bedingungen beginnen, Wie viele Beobachtungen tatsächlich geändert wurden, können sehr nützliche Informationen sein.

Übung: Außerhalb der Vereinigten Staaten wird die Kraftstoffeffizienz häufig in Litern pro Kilometer gemessen (beachten Sie, dass eine niedrige Zahl gut ist, da der verwendete Kraftstoff im Zähler steht). Um Meilen pro Gallone in Liter pro Kilometer umzurechnen, multiplizieren Sie den Kehrwert von mpg (1 / mpg) mit 2,35. Erstellen Sie eine Variable, die die Kraftstoffeffizienz jedes Autos in Litern pro Kilometer speichert.

Variablen mit If-Bedingungen erstellen

Zum Inhalt springen nach diesem Video

Wenn ein gen-Befehl eine if-Bedingung hat, wird (und muss) die resultierende Variable für alle Beobachtungen weiterhin existieren. Es wird jedoch ein fehlender Wert für Beobachtungen zugewiesen, bei denen die if Bedingung nicht wahr ist. Wenn ein replace-Befehl eine if-Bedingung hat, bleiben Beobachtungen, bei denen die if-Bedingung nicht wahr ist, unverändert. Auf diese Weise können Sie Variablen für verschiedene Beobachtungen auf unterschiedliche Werte einstellen.Angenommen, Sie möchten die Fünf-Punkte-Skala der Variablen rep78 auf eine Drei-Punkte-Skala reduzieren. Fügen Sie dazu den folgenden Code zu Ihrer do-Datei hinzu:

ersetzen rep3 = 1 wenn rep78<3
ersetzen rep3 = 2 wenn rep78 == 3
ersetzen rep3 = 3 wenn rep78>& rep78<.

Die erste Zeile erstellt die neue Variable rep3, setzt sie jedoch nur für Fälle, in denen rep78 kleiner als drei ist, auf eins. Die anderen werden vermisst. Die zweite Zeile ändert einige dieser Fehlschläge in zwei, und die dritte ändert mehr von ihnen in drei. Führen Sie die do-Datei aus, notieren Sie sich die Anzahl der Beobachtungen, die durch jede Zeile geändert wurden, und vergleichen Sie diese mit der Gesamtzahl der Beobachtungen im Datensatz.

Welchen Wert hat rep3 für Beobachtungen, bei denen rep78 fehlt? Fehlt, wie es sein sollte, weil es nie auf etwas anderes eingestellt war. Die fünf Beobachtungen, bei denen rep78 fehlt, wurden implizit oder explizit von allen drei Befehlen ausgeschlossen, sodass sie mit einem fehlenden Wert für rep3 begannen und nie geändert wurden. (Wenn Sie vergessen haben, fehlende Werte aus dem letzten Befehl auszuschließen, wäre rep3 drei für Autos, bei denen rep78 fehlt, ein allzu häufiger Fehler. Denken Sie daran, fehlt im Wesentlichen unendlich.)

Übung: Die Kombination der Einsen und Zweien macht Sinn, weil es so wenige von ihnen, aber es gab keine besondere Notwendigkeit, die Viere und Fünfer zu kombinieren. Erstellen Sie eine rep4-Variable, die die Einsen und Zweien kombiniert und die anderen Kategorien entsprechend neu nummeriert (dh rep4 sollte von eins auf vier gehen).

Recode

Zum Inhalt springen im Anschluss an dieses Video

Der Befehl recode bietet Ihnen eine alternative Möglichkeit, rep3 zu erstellen. Es ist ausschließlich für Umcodierungsaufgaben konzipiert und viel weniger flexibel als gen und replace. Aber es ist sehr einfach zu bedienen. Die Syntax ist:

recode var (Regel 1) (Regel 2) (weitere Regeln nach Bedarf…), gen(newvar)

Die gen—Option am Ende ist nicht erforderlich – wenn sie nicht vorhanden ist, wird die ursprüngliche Variable geändert, anstatt eine neue Variable mit den neuen Werten zu erstellen. Sie können auch recode an einer Liste von Variablen arbeiten lassen und sie alle auf die gleiche Weise umcodieren.

Der Kern des Befehls recode ist eine Liste von Regeln, die jeweils in Klammern stehen und angeben, wie eine Variable neu codiert werden soll. Sie haben die Form (inputValue = outputValue). Der inputValue kann eine einzelne Zahl, eine durch Leerzeichen getrennte Liste von Zahlen oder ein mit start/end angegebener Zahlenbereich sein. Der outputValue ist immer eine einzelne Zahl. Alles, was nicht von einer Regel abgedeckt wird, bleibt unverändert, so dass Sie mit recode nur wenige Werte einer Variablen ändern oder vollständig neu definieren können, wie wir es hier tun. Hier ist eine Recode-Version der Konvertierung von rep78 in eine Dreipunkteskala:

recode rep78 (1 2 = 1) (3 = 2) (4 5 = 3), gen(rep3b)

Fehlende Werte erforderlich keine spezielle Behandlung: da missing in den Eingabewerten keiner Regel aufgeführt wurde, werden Beobachtungen mit fehlenden Werten nicht geändert.

Übung: Erstellen Sie rep4b, indem Sie nur die Einsen und Zweien wie oben mit recode kombinieren.

Indikatorvariablen

Zum Inhalt springen nach diesem Video

Beim Erstellen von Indikatorvariablen können Sie die Tatsache ausnutzen, dass Stata true als eins und false als Null behandelt, indem Sie die neue Variable auf eine Bedingung setzen. Bedenken Sie:

gen lowMPG = (mpg<20)

(Die Klammern sind optional, erleichtern aber das Lesen. Dies erzeugt eine Indikatorvariable namens lowMPG, die eins (wahr) für Fahrzeuge ist, bei denen mpg kleiner als zwanzig ist, und Null (falsch), bei denen mpg größer oder gleich zwanzig ist. Um die Ergebnisse anzuzeigen, führen Sie die do-Datei aus und geben Sie dann browse make mpg if lowMPG ein.

Kein Auto hat einen fehlenden Wert für mpg, aber wenn man es täte, würde der obige Code ihm eine Null für lowMPG zuweisen, als ob bekannt wäre, dass es einen guten Benzinverbrauch hat. Die lowMPG-Variable sollte für solche Fälle fehlen, was Sie tun können mit:

gen lowMPG = (mpg<20) if mpg<.

Übung: Erstellen Sie eine Indikatorvariable, die Fahrzeuge mit guten Reparaturaufzeichnungen identifiziert (definiert als rep78 größer als 3). Wie würde sich Ihr Code ändern, wenn die Indikatorvariable benötigt würde, um Autos zu identifizieren, von denen bekannt ist, dass sie gute Reparaturaufzeichnungen haben?

String-Variablen

Zum Inhalt springen nach diesem Video

Die Befehle gen und replace funktionieren auch mit String-Variablen. Die Ausdrücke auf der rechten Seite des Gleichheitszeichens sind nicht mathematisch, aber sie folgen ähnlichen Regeln. Wenn Sie also den Buchstaben x in einer Variablen namens x speichern möchten, würden Sie gen x = „x“ sagen. Stata würde dies nicht verwirrend finden (obwohl Sie dies möglicherweise tun), da x in Anführungszeichen („x“) den Buchstaben x bedeutet und x ohne Anführungszeichen die Variable x.

Das Hinzufügen von Zeichenfolgen ist definiert als das Setzen einer Zeichenfolge nach der anderen, also „abc“ + „def“ = „abcdef“. Die meisten Arbeiten mit Zeichenfolgen werden jedoch von Spezialfunktionen ausgeführt, die Zeichenfolgen als Eingabe verwenden (entweder Zeichenfolgenwerte oder Variablen, die Zeichenfolgen enthalten) und Zeichenfolgen als Ausgabe zurückgeben.

Die Variable make zeichnet tatsächlich zwei Informationen auf: den Namen der Firma, die das Auto hergestellt hat, und den Namen des Automodells. Sie können den Firmennamen einfach mit der Funktion word() extrahieren:

gen company = word(make,1)

Um die Ergebnisse anzuzeigen, führen Sie die do-Datei aus und geben Sie browse make company ein. Die erste Eingabe oder das erste Argument für die Funktion word() ist die Zeichenfolge, auf die reagiert werden soll (in diesem Fall eine Variable, die Zeichenfolgen enthält). Die zweite ist eine Zahl, die angibt, welches Wort Sie möchten. Die Funktion unterteilt die Eingabezeichenfolge basierend auf den darin enthaltenen Leerzeichen in Wörter und gibt die angeforderte zurück, in diesem Fall die erste.

Wir werden viel mehr über String-Funktionen in Textdaten (in Kürze) sagen, aber wenn Sie anfangen möchten, können Sie viel mit den folgenden Funktionen tun:

word() Extrahiert ein Wort aus einer Zeichenkette
strpos() Zeigt an, ob eine Zeichenkette eine andere Zeichenkette enthält, und wenn ja, ihre Position
substr() Extrahiert Teile eines Strings
subinstr() Ersetzt einen Teil eines Strings durch etwas anderes
length() Gibt an, wie lang ein String ist (wie viele Zeichen er enthält)

Geben Sie help und dann den Namen einer haupt Stata Fenster zu lernen, wie es funktioniert.

Übung: Erstellen Sie eine Modellvariable, die den Namen des Automodells (d. h. den Rest der Marke) enthält. Ihr Code muss in der Lage sein, Modellnamen zu verarbeiten, die entweder ein oder zwei Wörter lang sind.

Konvertieren von String-Variablen in numerische Variablen

Zum Inhalt springen im Anschluss an dieses Video

Manchmal wird eine Variable, die numerisch sein sollte, als String in Stata eingegeben. Sie können dies mit dem Befehl destring beheben, der eine Zeichenfolgenvariable, die Zahlen enthält, in eine numerische Variable konvertiert. Die Syntax ist nur destring variable, replace , wobei variable durch den Namen der zu destringenden Variablen (oder Variablen) ersetzt werden soll. Wenn die Zeichenfolgenvariable etwas anderes als Zahlen enthält, können Sie die Option force hinzufügen, um Stata anzuweisen, sie trotzdem zu konvertieren. Beachten Sie, dass „nicht numerische Zeichen“ Dollarzeichen und Kommas enthalten!

Wenn Sie die force-Option verwenden müssen, liegt dies im Allgemeinen daran, dass Stata nicht sicher ist, was Sie tun, und Sie sollten sorgfältig darüber nachdenken, bevor Sie es tun. In diesem Fall sollten Sie die nicht numerischen Zeichen untersuchen, um festzustellen, ob es sinnvoll wäre, sie zuerst zu entfernen (wie diese Dollarzeichen und Kommas) oder ob die Variable nicht wirklich nur Zahlen ist.

Dieser Datensatz enthält keine Variablen, die destringed werden müssen, also machen wir eine:

gen x = „5“

Beachten Sie, wie die Anführungszeichen um „5“ bedeuten, dass x eine Zeichenfolgenvariable ist, die das Zeichen 5 enthält, keine numerische Variable, die den Wert 5 enthält. Um die Dinge zu komplizieren, ändern wir einige der Werte von x in tatsächlichen Text:

replace x = „missing“ if foreign

Versuchen Sie nun, x zu zerstören:

destring x, replace

Stata wird dies ablehnen, da einige der Werte von x nicht in Zahlen konvertiert werden können. Die Werte, die nicht konvertiert werden können, fehlen jedoch „, daher ist es durchaus angebracht, sie in fehlende Werte zu konvertieren. Versuchen Sie es also erneut mit der Option force :

destring x, replace force

Jetzt konvertiert Stata x in eine numerische Variable mit einigen fehlenden Werten.

Egen

Zum Inhalt springen im Anschluss an dieses Video

Mit dem Befehl egen, kurz für „extended generate“, haben Sie Zugriff auf eine weitere Funktionsbibliothek. Es ist ein bisschen ein Durcheinander, aber die Egen-Funktionen, die Sie am häufigsten verwenden, berechnen zusammenfassende Statistiken:

Name Description
min() Minimum value
max() Maximum value
mean() Mean
median() Median
sd() Standard Deviation
total() Total

These are examples of aggregate functions: they take multiple numbers as input and return a single number as output. Sie arbeiten auch beobachtungsübergreifend und können daher mit gen nicht einfach durchgeführt werden, da jeweils eine Beobachtung ausgeführt wird. Die Syntax sieht fast identisch mit gen :

egen variable = function()

Der große Unterschied zu egen besteht darin, dass Sie keinen eigenen mathematischen Ausdruck schreiben. Wenn Sie beispielsweise eine Variable auf einen Mittelwert dividiert durch zwei setzen müssten, könnten Sie nicht sagen, egen y = mean(x)/2 . Sie würden stattdessen zuerst egen y = mean(x) und dann y = y/2 ersetzen.

Ein weiterer wichtiger Unterschied besteht darin, wie mit fehlenden Werten umgegangen wird. Denken Sie daran, dass bei gen , wenn ein Teil der Eingabe fehlt, die Ausgabe fehlt. Egen ignoriert jedoch einfach fehlende Werte und berechnet das Ergebnis anhand der verfügbaren Daten. Normalerweise ist es das, was Sie wollen, aber Sie müssen wissen, was egen tut und sicher sein, dass es für Ihre spezielle Aufgabe sinnvoll ist.

Die egen-Funktionen zur Berechnung von Summenstatistiken werden sehr häufig mit by kombiniert, um Summenstatistiken für Gruppen zu berechnen. Berechnen Sie den mittleren Autopreis für jedes Unternehmen und zeigen Sie dann die Ergebnisse an mit:

bysort company: egen meanPrice = mean(price)
tab company, sum(meanPrice)

Denken Sie daran, dass bysort company: Sortiert zuerst die Daten nach Unternehmen und führt dann den folgenden egen-Befehl für jedes Unternehmen separat aus.

Die Nullen für die Standardabweichung spiegeln die Tatsache wider, dass jedes Auto, das von derselben Firma produziert wird, den gleichen Wert von meanPrice hat. Das liegt daran, dass meanPrice das Unternehmen beschreibt, nicht das Auto. In der Tat ist das die Definition einer Variablen, die eine Gruppe beschreibt: Jede Einheit innerhalb derselben Gruppe muss den gleichen Wert der Variablen haben.

Wenn wir nur den Mittelwert des Preises für jedes Unternehmen sehen wollten, hätten wir einfach ausführen können:

tab company, sum(price)

Aber nachdem wir egen ausgeführt haben, haben wir jetzt den Mittelwert in einer Variablen, die zur Verwendung zur Verfügung steht.

Übung: Erstellen Sie eine Variable, die den Mittelwert von rep78 für jedes Unternehmen enthält. Untersuchen Sie dann die Häufigkeit von rep78 in jedem Unternehmen, indem Sie eine bidirektionale Tabelle mit Tab erstellen. Achten Sie darauf, fehlende Werte anzugeben. Lincoln und Olds haben den gleichen Mittelwert; Wie gut denken Sie, dass dies die Verteilung von rep78 für die beiden Unternehmen zusammenfasst? Betrachten Sie als nächstes die fehlenden Werte: angenommen, der tatsächliche Wert von rep78 für die Autos mit fehlenden Vales wurden aufgedeckt. Was müssten sie sein, damit sich diese Mittel nicht ändern? Wie plausibel ist das?

Etiketten

Nach diesem Video zum Inhalt springen

Gute Etiketten erleichtern das Verständnis und die Arbeit mit Ihren Daten. Während Stata viele Arten von Labels hat, konzentrieren wir uns auf die gebräuchlichsten und nützlichsten: Variable Labels und Value Labels.

Variablenbezeichnungen

Variablenbezeichnungen vermitteln Informationen über eine Variable und können lange Variablennamen ersetzen. Dieser Datensatz enthält bereits eine gute Anzahl von Variablenbeschriftungen, wie Sie im Variablenfenster sehen können. Das einzige, was verwirrend ist, ist das Label auf foreign , also ändern Sie es mit dem Befehl label variable . Die Syntax zum Festlegen einer Variablenbezeichnung lautet:

label variable variableName „label“

Geben Sie also Folgendes ein:

label variable foreign „Car Origin“

Sehen Sie sich das Variablenfenster erneut an, um die Ergebnisse anzuzeigen.

Value Labels

Value Labels werden mit kategorialen Variablen verwendet, um Ihnen mitzuteilen, was die Kategorien bedeuten. Wir haben eine in Aktion mit der foreign Variable gesehen: es waren die Wertetiketten, die uns sagten, dass eine 0 „Inland“ und eine 1 „Ausland“ bedeutet.“

Lassen Sie uns Wertebeschriftungen untersuchen, indem wir die Werte von rep3 beschriften, der neuen Variablen, die wir neu codiert haben, um rep78 von einer Fünf-Punkte-Skala auf eine Drei-Punkte-Skala zu reduzieren. Wertebeschriftungen sind eine Zuordnung von einer Reihe von Ganzzahlen zu einer Reihe von Textbeschreibungen. Verwenden Sie dazu den Befehl label define:

label define mapName value1 „label1“ value2 „label2″…

Also:

label define replabel 1 „Bad“ 2 „Average“ 3 „Good“

Dies erzeugt ein Mapping namens replabel, wendet es aber auf nichts an. Bevor Sie etwas Nützliches tun, müssen Sie Stata anweisen, die Werte der Variablen rep mithilfe der soeben definierten Replabel-Zuordnung zu kennzeichnen. Die Syntax lautet:

label values variable map

Und somit:

label values rep3 replabel

Um die Ergebnisse zu sehen, führen Sie Folgendes aus:

list make rep3

Sobald eine Map definiert ist, können Sie sie auf eine beliebige Anzahl von Variablen anwenden: Ersetzen Sie einfach die einzelne Variable im obigen Befehl label values durch eine Liste von Variablen. Angenommen, Sie arbeiten mit Umfragedaten und Ihre Variablen umfassen das Geschlecht des Befragten, das Geschlecht des Ehepartners des Befragten und das Geschlecht aller Kinder des Befragten. Sie können nur eine Karte namens gender definieren und dann die Werte aller Gender-Variablen damit beschriften.

Drei Befehle zum Verwalten von Wertetiketten: label dir gibt Ihnen eine Liste aller definierten Etiketten, und label list sagt Ihnen, was sie bedeuten. Der Befehl describe gibt Ihnen den Namen der Wertebeschriftungen an, die jeder Variablen zugeordnet sind (neben vielen anderen nützlichen Dingen).

Übung: Erstellen Sie Wertetiketten für rep4 und wenden Sie sie an. Fühlen Sie sich frei zu entscheiden, wie die Ebenen zu beschreiben.

Beschriftungen über Recode

Wenn Sie mit recode eine neue Variable erstellen, erstellt Stata automatisch eine Variablenbeschriftung dafür („RECODE of …“). Sie können auch Wertebeschriftungen dafür definieren, indem Sie die gewünschte Beschriftung für jeden Wert am Ende der Regel einfügen, die ihn definiert. Erstellen Sie eine weitere Version von rep3, diesmal mit Etiketten direkt von seiner Erstellung, mit:

recode rep78 (1 2 = 1 „Schlecht“) (3 = 2 „Durchschnittlich“) (4 5 = 3 „Gut“), gen(rep3c)

Übung: Erstellen Sie einen rep4c mit recode und legen Sie Wertebeschriftungen dafür fest.

Diese do-Datei ändert den Datensatz, den sie verwendet, und sollte daher die neue Version speichern. Denken Sie daran, speichern Sie niemals Ihre Ausgabe über Ihre Eingabe, also speichern Sie die neuen Daten nicht als auto. In diesem Fall konnten Sie diese do-Datei nicht erneut ausführen: Sie stürzte ab, als versucht wurde, price2020 zu erstellen, da diese Variable bereits im geänderten Datensatz vorhanden wäre. Speichern Sie die Daten stattdessen als autoV2, wie in „Version 2 des Automobildatensatzes.“

speichern autoV2, ersetzen

Schließlich schließen Sie das Protokoll:

log close

Dies bringt uns zum Ende der Einführung in Stata. Wir hoffen, es war hilfreich für Sie. Um mehr zu erfahren, lesen Sie Data Wrangling in Stata oder die anderen Inhalte der SSCC Statistical Computing Knowledge Base.

Letzte Überarbeitung: 27.5.2020

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.