2016-06-29 9 views
-1

So habe ich eine große Anzahl von Datenbanken (82) in Stata, die jeweils etwa 1300 Variablen und mehrere tausend Beobachtungen enthalten. Einige dieser Datenbanken enthalten Variablen, die die mittlere oder Standardabweichung bestimmter Konzepte angeben. Zum Beispiel könnte eine Variable in einem solchen Datensatz "hebel_mess" heißen. Nun möchte ich wissen, welche Datensätze Variablen Konzept _mean oder Konzept _sd enthalten, ohne jeden Datensatz von Hand durchlaufen zu müssen.So finden Sie eine gemeinsame Variable in einer großen Anzahl von Datenbanken mit Stata

Ich dachte, dass es vielleicht eine Möglichkeit gibt, durch die Datenbanken nach Variablen zu suchen, die "mean" oder "sd" enthalten, leider habe ich eine Idee, wie man das macht. Ich verwende R- und Stata-Datendateien.

+0

Willkommen bei StackOverflow. Bitte werfen Sie einen Blick auf diese Tipps, wie Sie ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) erstellen können, sowie auf diesen Post zu [ein großartiges Beispiel in R erstellen] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). Vielleicht sind die folgenden Tipps zu [eine gute Frage stellen] (http://stackoverflow.com/help/how-to-ask) ebenfalls eine Lektüre wert. – lmo

Antwort

0

Ja, Sie können dies mit einer Schleife in Stata sowie R tun. Zunächst sollten Sie den Stata-Befehl ds und das Paket findname, die viele der hier beschriebenen Dinge und vieles mehr tun. Aber du zu zeigen, was „unter der Haube“ geschieht, werde ich den Stata-Code zeigen, dass dies unter erreichen können:

/*Set your current directory to the location of your databases*/ 
cd "[your cd here]" 

Speichern Sie die Namen der 82 Datenbanken auf eine Liste mit Namen „Dateiliste“ Stata ist dir mit Funktion für Makros. HINWEIS: Sie geben nicht an, um welche Art von Datei es sich bei Ihren Datenbankdateien handelt. Daher nehme ich .xls an. Dieser Befehl speichert alle Dateien mit der Erweiterung ".xls" in der Liste. Welche Art von Datei speichern Sie in der Liste, und wie Sie Ihre Datenbank importieren wird davon abhängen, welche Art von Dateien, die Sie beim Lesen sind.

local filelist : dir . files "*.xls" 

Dann Schleife über alle Dateien zu zeigen, welche diejenigen Variablen enthalten, die mit „_sd Ende "oder" _mean ".

foreach file of local filelist { 
    /*import the data*/ 
    import excel "`file'", firstrow clear case(lower) 

    /*produce a list of the variables that end with "_sd" and "_mean"*/ 

    cap quietly describe *_sd *_mean, varlist 
    if length("r(varlist)") > 0 { 

    /*If the database contains variables of interest, display the database file name and variables on screen*/ 

     display "Database `file' contains variables: " r(varlist) 
    } 
} 

Endnote, diese Schleife zeigt nur den Datenbanknamen und die darin enthaltenen Variablen an. Wenn Sie Aktionen an den Daten ausführen oder irgendetwas anderes ausführen möchten, müssen diese Aktionen in die Position des letzten "Anzeige" -Befehls eingefügt werden (was Sie letztendlich brauchen oder nicht).

+0

Ich sehe, wäre es die gleiche Idee in R? Könntest du mir zeigen? Tut mir leid, ich bin neu in diesem Bereich. – Floris

+0

Also in R habe ich das versucht: (f <- Datei.Pfad ("C: \\ User \\ Desktop \\ DATA")) d <- lapply (f, read.dta) Also für jede Datei ich Schleife und lese es in R mit der Funktion read.dta. Könnte ich jetzt irgendwie so etwas machen? e <- lapply (d, findname, wenn _mean, .... enthalten) oder würde er dann stattdessen die Dateinamen durchlaufen? – Floris

+0

Ich würde versuchen, die Liste der Dateien mit der Funktion 'list.files()' zu erstellen, dann 'apply()' auf dieser Liste. Ich bin weniger kompetent mit R und ich habe diesen Code nicht getestet, also lassen Sie mich wissen, wie es geht ... – enRANDOMSTRING

0

Sie können filelist (von SSC) verwenden, um ein Dataset von Dateien zu erstellen. Um filelist zu installieren, geben Sie in Stata das Befehlsfenster:

ssc install filelist 

Mit einer Liste von Datensätzen im Speicher, können Sie dann die Schleife über jede Datei und verwenden describe eine Liste von Variablen für jede Datei zu erhalten. Sie können diese Liste von Variablen in einer einzelnen String-Variablen speichern. Zum Beispiel wird im Folgenden die Namen aller Stata Datensätze mit Stata ausgeliefert sammeln und dann für jede Speicherung der Variablen sie enthalten:

findfile "auto.dta" 
local base_dir = subinstr("`r(fn)'", "https://stackoverflow.com/a/auto.dta", "", 1) 

dis "`base_dir'" 
filelist, dir("`base_dir'") pattern("*.dta") 

gen variables = "" 
local nmatch = _N 
qui forvalues i = 1/`nmatch' { 
    local f = dirname[`i'] + "/" + filename[`i'] 
    describe using "`f'", varlist 
    replace variables = " `r(varlist)' " in `i' 
} 
leftalign // also from SSC, to install: ssc install leftalign 

Sobald Sie in den Daten im Speicher all diese Informationen haben, können Sie einfach suchen spezifische Variablen. Zum Beispiel:

. list filename if strpos(variables, " rep78 ") 

    +-----------+ 
    | filename | 
    |-----------| 
13. | auto.dta | 
14. | auto2.dta | 
    +-----------+