Import Excel Sheets, Loop?

Fragen zu Stata Syntax und Do-Files.

Import Excel Sheets, Loop?

Beitragvon hanna » Mo 29. Apr 2013, 19:15

Liebe Statalisten,
Ein absoluter Anfänger braucht eure Hilfe bei folgendem Problem:

Ich habe ein Excel File mit Daten in 2 Sheets, die ich im Data Editor zusammenbringen möchte.
Es geht um 2 Variationen des gleichen Experiments das in verschiedenen Ländern in verschiedenen Gruppen durchgeführt wurden.
Allerdings habe ich eine Variable ID für jede Beobachtung, d.h. ID 154 beschreibt beispielsweise wie sich Proband 1 in Experiment 1 in Session 1 verhalten hat und wie sich Proband 1 in Experiment 2 in Session 1 verhalten hat.
D.h. ich könnte die IDs benutzen um die Daten des 2.Experiments an das erste anzuhängen

Ein Tipp war bisher, die Sheets einzeln als 1.csv und 2.csv zu speichern und dann über 'forvalues' und 'insheet' die Daten zusammen zu bringen.

Kann mir jemand bei der Syntax dafür helfen?
Und außerdem - sollte ich Variablen die sich dann wiederholen so wie die Nummerierung der Sessions etc. vorher löschen oder bearbeite ich den Datensatz besser erst wenn er die Daten beider Sheets umfasst?

Ein kleiner Denkanstoss reicht, ich will es ja schließlich lernen.
Vielen Dank an alle die helfen!
hanna
 
Beiträge: 11
Registriert: Mo 29. Apr 2013, 18:49
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Import Excel Sheets, Loop?

Beitragvon daniel » Di 30. Apr 2013, 10:27

Hast Du Stata 12 oder höher? Falls ja, schau Dir -xls2dta- an, um die sheets in Stata zu bekommen. Tippe dazu

Code: Alles auswählen
ssc inst xls2dta


Das Datensatzmanagement der einzelnen sheets würde ich in Stata machen. Danach klingt es nach einem -merge- oder -append- job. Tipppe

Code: Alles auswählen
help merge
help append


Detailliertere Informationen zum Aufbau der sheets bzw. der Stata Datensätze helfen konkretere Hilfestellungen zu geben.
daniel
 
Beiträge: 1060
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Import Excel Sheets, Loop?

Beitragvon hanna » Di 30. Apr 2013, 12:28

Danke für den Tipp.
xls2dta wäre wirklich wohl die einfachste Möglichkeit. Leider kann ich an meiner Universität nicht mit 12.1 arbeiten, xls2dta funktioniert daher nicht als Lösung.

Ich habe diesen Code gefunden, der mein Problem lösen könnte. (Aus einem anderen Forum) Kann mir jemand den Gebrauch von 'local' hier erklären?
Ich habe Mappe_1.xlsx Mappe_2.xlsx und Mappe_3.xlsx

local mylist AB RB PC LS GO

foreach x of local mylist {

import excel C:\Users\Admin\Documents\Teaching\Marks_`x'.xlsx,
sheet("TI") firstrow clear

save `x', replace

}

Vielen Dank!
Hanna
hanna
 
Beiträge: 11
Registriert: Mo 29. Apr 2013, 18:49
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Import Excel Sheets, Loop?

Beitragvon daniel » Di 30. Apr 2013, 12:54

Leider kann ich an meiner Universität nicht mit 12.1 arbeiten, xls2dta funktioniert daher nicht als Lösung.

Ich habe diesen Code gefunden, der mein Problem lösen könnte.


Dieser code wird Dein Problem nicht lösen, da -import excel- erst in Stata 12 eingeführt wurde. -xls2dta- verwendet -import excel-, eigentlich ist der gepostete code so ziemlich das, was auch -xls2dta- macht.

Du wirst auf -insheet- zurückgreifen müssen. Einen -foreach- loop kannst Du verwende, ist bei 2 Files aber ein wenig überflüssig.

Zur Frage

Code: Alles auswählen
help local


Ein -local- ist das, was in anderen Programmiersprache eine Variable wäre. Die Zeile

Code: Alles auswählen
local mylist AB RB PC LS GO


erstellt das local mylist mit dem Inhalt AB RB PC LS GO.

Du kannst damit einfach mal ein wenig rumprobieren.

Code: Alles auswählen
loc myname hanna
di "`myname'"
loc foo  foo bar 42
di "`foo'"
daniel
 
Beiträge: 1060
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Import Excel Sheets, Loop?

Beitragvon hanna » Di 30. Apr 2013, 16:33

Danke Daniel,
Ich habe Version 12 zur Verfügung. Stata sagt aber bei xls2dta es ist ein Programm der Version 12.1 und da ich keine Zugriffsrechte habe um Updates durchzuführen, kann ich mit xls2dta nicht arbeiten, aber mit import excel.
Nur so weit ich das sehe, gibt es keine option 'allsheets' oder ähnliches für import excel.

Mein Code sieht bisher jetzt so aus, aber funktioniert natürlich nicht..
local mylist 1 2 3

foreach x of local mylist {

import excel "H:\...\Mappe_`"x"'.xlsx",
firstrow clear

save `x', replace
}

use Mappe_1.dta
forvalues x > 1 {
append using `x'.dta
}
hanna
 
Beiträge: 11
Registriert: Mo 29. Apr 2013, 18:49
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Import Excel Sheets, Loop?

Beitragvon daniel » Di 30. Apr 2013, 16:55

Hm, rein pädagogisch wäre es sicher besser, den loop zu korrigieren. Ich zeige dennoch zwei Möglichkeiten.

1. -xls2dta-
Code: Alles auswählen
findfile xls2dta.ado
doedit "`r(fn)'"


oder sonst das ado-file xls2dta.ado im Editor öffnen und in der vierten Zeile

Code: Alles auswählen
vers 12.1


zu

Code: Alles auswählen
vers 12


ändern und speichern. Anschließend -discard- eingeben und das Programm sollte laufen.

2. Loop korrigieren

Code: Alles auswählen
/* -> dieses local muss nicht sein, ist nur eine nette Übung
local mylist 1 2 3

foreach x of local mylist {
*/

forv j = 1/3 {

/* import excel "H:\...\Mappe_`"x"'.xlsx",
-> die Anführungsstriche sind hier fehl am Platz */

import excel "H:\...\Mappe_`j'.xlsx" ,firstrow clear

/* save `x', replace  -> in `x' steht nur die 1 nicht "Mappe_1", daher funktioniert der code nach der Schleife nicht*/

sa Mappe_`j'.dta ,replace
}

use Mappe_1.dta
/* forvalues x > 1 { -> illegale Syntax (vgl. -help fovalues-)
zudem ist der loop nicht nötig, da -append- eine Liste an Dateinamen erlaubt (vgl. -help append-)*/

append using Mappe2.dta Mappe3.dta

/*} */
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 0 Gäste