Mata Funktion ausführen

Mata, die Matrizen-Programmiersprache von Stata.

Mata Funktion ausführen

Beitragvon str3ber » Mo 27. Jan 2014, 16:39

Hallo, ich würde gerne diese MataFunktion ausführen.
Dazu lade ich den code zuerst in ein dofile und compile ihn durch run
meine zu vergleichenden Variablen heißen {neu,alt} wie lade ich diese in das programm?


Code: Alles auswählen
mata:
/******************************************************************************
   Terminology Note
   key: string to measure each observation against
   trymatch: one of many potential matches to be measured against the key
   TRIES: Nx1 vector of all "trymatch"s
******************************************************************************/

void matalev1var(string scalar varname, string scalar key,
                 string scalar newvar , string scalar touse) {

   TRIES = st_sdata(. , varname , touse) // Nx1 string vector with potential matches
   dist = J(rows(TRIES),1,.)             // Nx1 real vector to hold lev distances to each match

   for (t = 1 ; t <= rows(TRIES) ; t++) {
      dist[t] = matalev(key,TRIES[t,1]) // save distance
    }
    st_store(. , st_addvar("int", newvar) , touse , dist)
}

void matalev2var(string scalar var1   , string scalar var2,
                 string scalar newvar , string scalar touse) {

    KEYS  = st_sdata(. , var1 , touse)
   TRIES = st_sdata(. , var2 , touse) // Nx1 string vector with potential matches
   dist = J(rows(TRIES),1,.)          // Nx1 real vector to hold lev distances to each match
   
   for (t = 1 ; t <= rows(TRIES) ; t++) {
       dist[t] = matalev(KEYS[t,1],TRIES[t,1])
    }
    st_store(. , st_addvar("int", newvar) , touse , dist)
}

real scalar matalev(string scalar key, string scalar trymatch) {
    keylength = strlen(key)         
   trylength = strlen(trymatch)     
    // declare distance matrix   
   D = J(keylength , trylength , .)
    // Add starting penalties in first column
    D = ((1::keylength) , D)
    // Add starting penalties in first row
    D = ((0..trylength) \ D)    
    // add penalty for each operation required to reconcile the two strings
    for (i = 1 ; i <= keylength ; i++ ) {
        for (j = 1 ; j <= trylength ; j++ ) {
            if (substr(key, i, 1) == substr(trymatch, j, 1)) {
                D[i+1,j+1] = D[i,j]
            }
            else {         //    (deletion   , insertion  , substition)
                D[i+1,j+1] = min((D[i,j+1]+1 , D[i+1,j]+1 , D[i,j]+1  ))   
            }
        }
    }
    return(D[i,j])
    }
end
str3ber
 
Beiträge: 16
Registriert: Do 11. Jul 2013, 12:10
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Mata Funktion ausführen

Beitragvon daniel » Di 28. Jan 2014, 12:24

Ich denke, Mata schießt hier etwas über das Ziel hinaus, aber

Code: Alles auswählen
. mata : myfcn(args)


führt die Mata Funktion myfunc() mit den argumenten args aus.
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: Mata Funktion ausführen

Beitragvon str3ber » Di 28. Jan 2014, 17:00

Okay das klappt schonmal zumindest wenn ich einen string selbst einsetzte

mata : matalev("aba","bba")

oder so jetzt würde ich ja gerne meine spalte, also alle beobachtungen übergeben hast du einen vorschlag dafür?
str3ber
 
Beiträge: 16
Registriert: Do 11. Jul 2013, 12:10
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Mata Funktion ausführen

Beitragvon daniel » Di 28. Jan 2014, 19:28

Lies die Dokumentation und Einführungsbücher. Der von Dir eingeschlagene Weg scheint extre umständlich und zeitraubens für Dich und andere zu sein.
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: Mata Funktion ausführen

Beitragvon str3ber » Di 28. Jan 2014, 19:39

Dazu muss ich ja der funktion matalev1var("original","vergleichvariable","newvar","....")

was kommt denn an die stelle von touse hab den hintergrund dort auch noch nicht verstanden...

mata : matalev1var("original","vergleichvariable","newvar","touse")
übergebe dann wird zwar gerechnet und newvar angelegt und auch ein numerischer wert übergeben allerdings ha dieser nichts mit der levenstein distanz zu tuen :)
str3ber
 
Beiträge: 16
Registriert: Do 11. Jul 2013, 12:10
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Mata Funktion ausführen

Beitragvon str3ber » Di 28. Jan 2014, 19:41

Jetzt ist es ja fast geschafft es ist mein erstes Semester in C also generell in einer programmier sprache und ich verspreche stata und anschlieend mata zu lernen mit der hilfe von lernbücher aber dieses Problem muss jetzt über diesen weg funktionieren ich wäre dir unglaublich dankbar wenn du vllt weißt was da an der stelle passiert
str3ber
 
Beiträge: 16
Registriert: Do 11. Jul 2013, 12:10
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Mata Funktion ausführen

Beitragvon str3ber » Di 28. Jan 2014, 20:52

Okay also es läuft... und versuche dann mal mich mit mata zu beschäftigen um eine neue schleife zu schreiben... denke ich habe deine geduld genug ausgereizt... Dankeschön!
str3ber
 
Beiträge: 16
Registriert: Do 11. Jul 2013, 12:10
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post


Zurück zu Mata

Wer ist online?

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

cron