Zeile mit Spalte vergleichen *strings*

Fragen zu Stata Syntax und Do-Files.

Zeile mit Spalte vergleichen *strings*

Beitragvon str3ber » Sa 25. Jan 2014, 18:22

Hallo,
Mein Problem ist folgendes ich möchte einen Zeileneintrag mit einer kompletten Spalte auf Gleichheit prüfen.
Der Zeileneintrag / Spalteneinträge sind jeweils strings ohne Leer-Sonder oder Groß und kleinschreibung.

kleines Beispiel, || (nur als Abgrenzung sonst keine Bedeutung)

Spalte 1 || Spalte2 || newvar
abc || afg || 0
der || red || 1
tu || abc || 1
ghij || ghik || 1
eins || eins || 0

für eintrag abc findet er in spalte2 zeile 3 eine überinstimmung also 0 für der tu ghij gibt es keine übereinstimmung also 1 usw....
Die || stehen für die Abgrenzung zwischen den Variablen
str3ber
 
Beiträge: 16
Registriert: Do 11. Jul 2013, 12:10
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Zeile mit Spalte vergleichen *strings*

Beitragvon daniel » So 26. Jan 2014, 13:03

Hier ist eine Möglichkeit mit -merge-

Code: Alles auswählen
// replicate your example
clear
inp str4 Spalte1 str4 Spalte2
abc afg
der red
tu abc
ghij ghik
eins eins
end

l

// here is a solution using -merge-
tempfile tmp
preserve
keep Spalte2
sa `tmp' ,replace
restore

ren (Spalte1 Spalte2) (Spalte2 oldSpalte2)
mer 1:1 Spalte2 using `tmp' ,keep(1 3)

g byte newvar = (_merge != 3)
drop _merge
ren (Spalte2 oldSpalte2)(Spalte1 Spalte2)
l
Stata is an invented word, not an acronym, and should not appear with all letters capitalized: please write “Stata”, not “STATA”.
daniel
 
Beiträge: 1060
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Zeile mit Spalte vergleichen *strings*

Beitragvon str3ber » So 26. Jan 2014, 16:59

Puh können wir das nochmal durchgehen muss es ja auch versthen aber schonmal danke
Zu Begin stellst du die kleine Tabelle auf soweit so gut
kannst du mir die zeile 8 und 9 erklären?
weiß nicht genau was da passiert

Code: Alles auswählen
// here is a solution using -merge-
1tempfile tmp
2preserve
3keep Spalte2
4sa `tmp' ,replace
5restore
6
7ren (Spalte1 Spalte2) (Spalte2 oldSpalte2)
8mer 1:1 Spalte2 using `tmp' ,keep(1 3)

9g byte newvar = (_merge != 3)
10drop _merge
11ren (Spalte2 oldSpalte2)(Spalte1 Spalte2)
12l


Danke
str3ber
 
Beiträge: 16
Registriert: Do 11. Jul 2013, 12:10
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Zeile mit Spalte vergleichen *strings*

Beitragvon str3ber » So 26. Jan 2014, 17:14

also wenn ich eine mx2 matrix habe
mit unterschiedlich vielen zeilen in den beiden spalten wie ich muss ich den quelltext ändern?
das klappt bisdahin ja wirklich super
str3ber
 
Beiträge: 16
Registriert: Do 11. Jul 2013, 12:10
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Zeile mit Spalte vergleichen *strings*

Beitragvon daniel » So 26. Jan 2014, 21:06

also wenn ich eine mx2 matrix habe
mit unterschiedlich vielen zeilen in den beiden spalten wie ich muss ich den quelltext ändern?


Ok, kurz zur Terminologie. In Stata wird die Matrix Datensatz genannt, der aus Variablen (i.e. Spaltenvektoren) und Beobachtungen (i.e. Zeilenvektoren) zusammengesetzt ist.

Eine Matrix, wie Du sie beschreibsz existiert werder in Stata, noch in Mata, noch m.W. sonst in der Mathematik. Eine n x m Matrix kann in den m Spalten unmöglich eine unterschiedliche Anzahl an n Zeilen haben. Was Du vermutlich meist, sind unterschiedlich viele fehlende Werte. In diesem Fall würde ich die fehlenden Werte ersertzen. Wie genau hägt stark davon ab, welche der beiden Variablen fehlende Werte hat, und wie <newvar> in diesem Fall kodiert werden soll.
Stata is an invented word, not an acronym, and should not appear with all letters capitalized: please write “Stata”, not “STATA”.
daniel
 
Beiträge: 1060
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post


Zurück zu Stata Syntax

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 12 Gäste

cron