die folgenden folien beinhalten erläuterungen, die einen inhalt des seminars fehler in der schule...

77
enden Folien beinhalten Erläuterungen, die einen I nars ‚Fehler in der Schule – Schülerfehler‘ unters e, wie sich systematisch auftretende Fehler erkenn sengrößen zwischen 25 und 30, und vier bis sechs z den Klassen, dürfte es kaum möglich sein, die Feh zelne Schülerin, jeder Schüler macht, im Blick zu egt es nahe, rechnergestützte Analyseverfahren zu gleich einen Blick auf die angewandten wissenschaf psychologisch-pädagogischer Fehlerforschung zu ri en sollen dabei behilflich sein, in Eigenarbeit di besprochenen und erprobten Rechnen- und Analysesch vollziehen.

Upload: wibeke-westermann

Post on 05-Apr-2015

105 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

Die folgenden Folien beinhalten Erläuterungen, die einen Inhaltdes Seminars ‚Fehler in der Schule – Schülerfehler‘ unterstützensollen:

Die Frage, wie sich systematisch auftretende Fehler erkennen lassen.

Bei Klassengrößen zwischen 25 und 30, und vier bis sechs zu betreuenden Klassen, dürfte es kaum möglich sein, die Fehler, die jede einzelne Schülerin, jeder Schüler macht, im Blick zu behalten.

Damit liegt es nahe, rechnergestützte Analyseverfahren zu nutzen unddamit zugleich einen Blick auf die angewandten wissenschaftlichen Methoden psychologisch-pädagogischer Fehlerforschung zu richten.

Die Folien sollen dabei behilflich sein, in Eigenarbeit die imSeminar besprochenen und erprobten Rechnen- und Analyseschrittenach zu vollziehen.

Page 2: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

Ein erster, wichtiger Schritt der systematischen Analyse von Fehlernbesteht in der Erfassung auftretender Fehler.Die detaillierte Feinauflösung dieser Erfassung kann nur gegenstands-,bzw. fachspezifisch diskutiert und erläutert werden.Im Prinzip gilt es, auftretende Fehler, unterschieden nach unter-schiedlichen Fehlerarten (siehe dazu Weimer 1925), möglichst genau,bezogen auf den Ort ihres Auftretens, zu erfassen.Um dies an einem einfachen Beispiel kurz zu demonstrieren, wird aufder nächsten Folie ein Text vorgestellt, der als Diktat vorgegeben wird.Die hier nicht geleistete Aufgabe bestünde bei der Konzeption desTextes darin, unterschiedliche Komma-Setz-Regeln (der aktuelle Duden behandelt dieses Thema in den § 71 bis 79) an verschiedenen Stellendes Textes, idealer Weise möglichst mehrfach, einzubauen. Das mehrfache Auftreten erlaubt Hinweise auf irrtümliche Annahmen,wenn auf inkonsistente Art und Weise mit der Kommasetzung unge-gangen wird.

Page 3: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

Beispiel für einen zu analysierenden Text; der Fokus soll hier auf der Analyse von Komma-Fehlern liegen

Text eines Diktats:

„Peter, ein Junge aus der Nachbarschaft, traf seine Freundin Inge. Inge war gerade auf dem Weg zum Freibad,obwohl es regnete, recht kalt war und das Wetter damit nicht gerade zum Baden einlud. Peter, der einen dicken Pullover unter einer Regenjacke trug, fand das Badengehendaher auch eine recht merkwürdige Idee. Er schlug statt dessen vor, ins Kino zu gehen. Doch er wollte, sie nicht. […..]“

Page 4: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

SchülerIn Komma_01 Komma_02 Komma_03 Komma_04 Komma_05 Komma_06 Komma_07 Komma_08

Sahra 1 1 1 1 2 1 1 1

Beate 1 1 1 1 1 1 1 1

Jürgen 2 1 2 2 1 2 2 2

Günther 1 1 2 2 2 1 2 2

Dieter 1 1 2 2 2 2 0 1

….

Codierung:• 0 = Nicht bearbeitet• 1 = Richtig• 2 = Fehler

Die im Text zu analysierenden Fehler müssen in einem ersten Schritt markiert werden. EineMöglichkeit wäre es, einfach alle erforderlichen Kommata durchzunummerieren. Wichtig ist es,ein möglichst einfach und sicher handhabbares Verfahren anzuwenden.

Im Anschluss wird eine Datenmatrix erstellt, bspw. so wie in der folgenden Tabelle dargestellt.Für jede Schülerin und jeden Schüler wird mit Hilfe einer festzulegenden Codierung eingetragen, ob das erforderliche Komma richtig oder falsch gesetzt wurde oder ob die Passagegar nicht geschrieben wurde.

Page 5: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

Wie lassen sich diese Daten nun auswerten?

Zunächst ist zu betonen, dass es ganz unterschiedliche Fragen gibt, die an diese Daten gestellt werden können. Entsprechend gibt esmehr als eine Antwort auf die Frage nach der Vorgehensweise einerAuswertung.

Hier wird eine dieser Fragen in einem exemplarischen Sinne hervor-gehoben, um die Vorgehensweise vorzustellen und zu erläutern.Diese Frage lautet:

Wie häufig tritt bei einem einzelnen Schüler/Schülerin ein bestimmterFehler auf. Oder anders formuliert: Wie verteilen sich die Fehler-häufigkeiten bezogen auf die Schüler/Schülerinnen und die verschiedenen Anlässe, einen Fehler zu machen?

Page 6: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

Vorgestellt wird die Vorgehensweise an einem Datensatz, der (auch) imSeminar erhoben wurde: Daten des d2 Aufmerksamkeits-Belastungstests(Brickenkamp 1981; 2002).

Vereinfacht sind in diesem Satz die dabei erhobenen Daten wie folgt codiert:

• 0 = Nicht bearbeitet• 1 = Richtig• 2 = Fehler

Für jede der 14 Zeilen und allen Spaltendes Tests wird eingetragen, ob das Zeichen richtig (= 1), fehlerhaft (= 2) odergar nicht (= 0) bearbeitet wurde. Wie man sieht, wurden in dem hier gezeigten Abschnitt alle Zeichen richtigangestrichen.

Page 7: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

Die Daten jedes Testbogens sind hier durch eine Leerzeile vonein-ander getrennt.

Die hier gestellte Aufgaben lautetdamit genauer:Wie häufig werden die Zeichen inder Zeile 1 und in der Spalte 1fehlerhaft markiert?

Wie häufig werden die Zeichen inder Zeile 2 und in der Spalte 1fehlerhaft markiert? Etc.

Page 8: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

Gib mirnur die Daten

der zweiten Zeile,erste Spalte

Gib mirnur die Daten

der zweiten Zeile,erste Spalte

Die Vorgehensweise zur Beantwortung dieser Frage lässtsich schematisch wie folgt darstellen:

Gesamtdatensatz

Gib mirnur die Daten

der ersten Zeile,erste Spalte

Teildatensatz

Aus dem Gesamtdaten-satz werden nacheinanderTeildatensätze gebildet, diejeweils nur die Daten einerZeile und einer Spalteenthalten.

Page 9: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

SPSS/PASW bietet dafür unter Daten die Option Fälle auswählen

Page 10: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

Klicken Sie diese Option an, öffnet sich das folgende Dialogfenster.Dort klicken Sie das Feld Falls Bedingung zutrifft Falls an, woraufdas nächste Dialogfenster geöffnet wird, in dem Sie Zeile = 1eingeben.

Page 11: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

Die Datei sieht nun wie folgt aus: Es gibt nur noch die Daten aller Zeilen 1und der Spalte 1 (S_01).

Wie kann jetzt ermittel werden,wie oft in der Variable S_01 die Werte0, 1 und 2 vorkommen?

Dazu gibt es einen Befehl:

Page 12: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

Unter Transformieren findet sich die Option Werte in Fällen zählen

Page 13: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich
Page 14: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich
Page 15: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

Auf die bis zum diesem Punkt erläuterte Art und Weise ließensich jetzt alle Spalten, aller Zeilen nacheinander analysieren. Doch: bei 14 Zeilen à 47 Spalten müsste 658 mal dieselbe Prozedurmit Mausklick und entsprechenden Eingaben durchgeführt werden— eine extrem mühsame ‚Eselsarbeit‘ .

Doch SPSS/PASW bietet, wie fast alle anderen Programme auch, Automatisierungsoptionen in Form sog. Syntax-Prozeduren oderMakros.

Im folgenden wird die Nutzung dieser Optionen erläutert. Kurz: fürjede Spezifikation per Mausklick und Tastatur wird im Hintergrundein Programmier-Code generiert, der für gewöhnlich ‚unsichtbar‘bleibt. Um diesen Code zu sehen müssen folgende Einstellungenvorgenommen werden:

Page 16: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

Unter Bearbeiten finden Sieganz unter die Option Optionen.Diese klicken Sie an.

Page 17: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

Dann weiter zu Datei-Speicherstellen. Dort findet sich das FeldSitzungs-Journal.

Page 18: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

Hier kann die Option Syntax in Journal aufzeichnen aktiviert werden,wodurch automatisch im Hintergrund der Programmier-Code (nahezu) aller Arbeitsschritte aufgezeichnet wird. Ein Stufe tiefer kann festgelegtwerden, ob die Aufzeichnung jeweils an die bereits vorhandenen Auf-zeichnungen angehängt werden sollen, oder ob bei jedem Neustart des Programms die vorherigen Eintragungen gelöst und eine neueAufzeichnung erstellt wird. Hier gilt es zu bedenken, dass bei Anhängenund komplexen Programmen relativ schnell vorhandene Speicher-kapazitäten erreicht werden können, die Software dann auf unterschied-liche Speicherorte zugreift, was die Rechengeschwindigkeit erheblichreduzieren kann.Zu guter Letzt muss der Speicherort der Datei und der Name derJournal-Datei festgelegt werden – sofern nicht die Voreinstellungakzeptiert wird.

Page 19: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

Um alle verfügbaren Befehle und Optionen, inklusive ihrer Spezifikationen, zu sehen und erläutert zu bekommen, findet sich unterHilfe die Rubrik Befehlssyntax-Referenz.

Page 20: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

Die folgenden Seiten erläutern nun Schritt für Schritt den Inhalt einerSyntax, mit der die Berechnungen der Fehlerhäufigkeit in Prozentenaller bearbeiteten Spalten und Zeilen durchgeführt werden kann.

Die Befehle können dabei

a) als solche direkt in das Programm eingegeben werden – was die Kenntnis dieser Befehle und ihrer Spezifikationen erfordert, oder

b) die Befehle können per Mausklick und Tastatureingaben, wie weiter oben erläutert, so lange eingegeben werden, bis das Resultat den gewünschten Zielen entspricht, um dann den Programmier-Code aus dem Journal heraus zu kopieren und in das Programm einzufügen.

Page 21: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

GET FILE='SPEICHER01.sav' /KEEP= Zeile, S_01 .EXECUTE .

SELECT IF (Zeile = 1) .EXECUTE .

COUNT F_S = S_01 (2) .EXECUTE .COUNT R_S = S_01 (1) .EXECUTE .COUNT O_S = S_01 (0) .EXECUTE .

RECODE F_S R_S O_S (MISSING=0) .EXECUTE .

COMPUTE Fall = 1 .CREATE Fall = CSUM(Fall) .CREATE F_S = CSUM(F_S) .CREATE R_S = CSUM(R_S) .CREATE O_S = CSUM(O_S) .EXECUTE .

SORT CASES BY Fall (D) .SELECT IF ($casenum = 1) .EXECUTE .

COMPUTE Proz_F = (100 * F_S) / (F_S + R_S) .EXECUTE .

Dieser Befehlsbereichöffnet die in Anführungszeichengesetzte Datei und listet dabeidurch den Zusatz KEEP nur dienach dem Gleichheitszeichenaufgeführten Variablen.

Page 22: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

GET FILE='SPEICHER01.sav' /KEEP= Zeile, S_01 .EXECUTE .

SELECT IF (Zeile = 1) .EXECUTE .

COUNT F_S = S_01 (2) .EXECUTE .COUNT R_S = S_01 (1) .EXECUTE .COUNT O_S = S_01 (0) .EXECUTE .

RECODE F_S R_S O_S (MISSING=0) .EXECUTE .

COMPUTE Fall = 1 .CREATE Fall = CSUM(Fall) .CREATE F_S = CSUM(F_S) .CREATE R_S = CSUM(R_S) .CREATE O_S = CSUM(O_S) .EXECUTE .

SORT CASES BY Fall (D) .SELECT IF ($casenum = 1) .EXECUTE .

COMPUTE Proz_F = (100 * F_S) / (F_S + R_S) .EXECUTE .

Durch diesen Befehl SELECT IF alle Fälle aus der Datei entfernt, bei denen die Variable Zeilenicht den Wert 1 aufweist.

Page 23: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

GET FILE='SPEICHER01.sav' /KEEP= Zeile, S_01 .EXECUTE .

SELECT IF (Zeile = 1) .EXECUTE .

COUNT F_S = S_01 (2) .EXECUTE .COUNT R_S = S_01 (1) .EXECUTE .COUNT O_S = S_01 (0) .EXECUTE .

RECODE F_S R_S O_S (MISSING=0) .EXECUTE .

COMPUTE Fall = 1 .CREATE Fall = CSUM(Fall) .CREATE F_S = CSUM(F_S) .CREATE R_S = CSUM(R_S) .CREATE O_S = CSUM(O_S) .EXECUTE .

SORT CASES BY Fall (D) .SELECT IF ($casenum = 1) .EXECUTE .

COMPUTE Proz_F = (100 * F_S) / (F_S + R_S) .EXECUTE .

In diesem Block werden durchden Befehl COUNT zunächst neue Variablen generiert, dieden nach COUNT eingetragenenNamen erhalten. Hier also F_S (soll für Fehler in der Spaltestehen) R_S (richtig in der Spalte)und O_S (ohne Bearbeitung). Nach dem Gleichheitszeichen wird die Variable aufgeführt, in der die in Klammern stehendenWerte gezählt werden sollen.

Page 24: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

GET FILE='SPEICHER01.sav' /KEEP= Zeile, S_01 .EXECUTE .

SELECT IF (Zeile = 1) .EXECUTE .

COUNT F_S = S_01 (2) .EXECUTE .COUNT R_S = S_01 (1) .EXECUTE .COUNT O_S = S_01 (0) .EXECUTE .

RECODE F_S R_S O_S (MISSING=0) .EXECUTE .

COMPUTE Fall = 1 .CREATE Fall = CSUM(Fall) .CREATE F_S = CSUM(F_S) .CREATE R_S = CSUM(R_S) .CREATE O_S = CSUM(O_S) .EXECUTE .

SORT CASES BY Fall (D) .SELECT IF ($casenum = 1) .EXECUTE .

COMPUTE Proz_F = (100 * F_S) / (F_S + R_S) .EXECUTE .

Der Befehl RECODE codiert inallen nachstehend aufgeführtenVariablen, hier F_S, R_S und O_S,die in der nachfolgenden Klammer stehenden Werte um.In dem hier gezeigten Fall werdenaus fehlenden Werten (MISSING)der Wert Null.Der Sinn dieses Befehls bestehtdarin, sicher zu stellen, dass keine fehlenden Werte vorliegen, weil in einem solchen Fall das gleich folgende Aufaddieren derWerte einer Spalte genau voreinem fehlenden Wert stoppenwürde.

Page 25: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

GET FILE='SPEICHER01.sav' /KEEP= Zeile, S_01 .EXECUTE .

SELECT IF (Zeile = 1) .EXECUTE .

COUNT F_S = S_01 (2) .EXECUTE .COUNT R_S = S_01 (1) .EXECUTE .COUNT O_S = S_01 (0) .EXECUTE .

RECODE F_S R_S O_S (MISSING=0) .EXECUTE .

COMPUTE Fall = 1 .CREATE Fall = CSUM(Fall) .CREATE F_S = CSUM(F_S) .CREATE R_S = CSUM(R_S) .CREATE O_S = CSUM(O_S) .EXECUTE .

SORT CASES BY Fall (D) .SELECT IF ($casenum = 1) .EXECUTE .

COMPUTE Proz_F = (100 * F_S) / (F_S + R_S) .EXECUTE .

In diesem Block sind zwei Befehleenthalten: COMPUTE und CREATE CSUM. Mit COMPUTE wird eine neue Variable generiert,die den Namen Fall erhält. Durch das Gleichheitszeichen wirdallen Fällen dieser neuen Variableder danach angegebene Wert, hier 1, zugewiesen.

Mit CREATE und CSUM werdenalle Werte einer Spalte auf-addiert. Direkt nach CREATE wirddie Zielvariable des Aufaddierensangeben.

Page 26: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

GET FILE='SPEICHER01.sav' /KEEP= Zeile, S_01 .EXECUTE .

SELECT IF (Zeile = 1) .EXECUTE .

COUNT F_S = S_01 (2) .EXECUTE .COUNT R_S = S_01 (1) .EXECUTE .COUNT O_S = S_01 (0) .EXECUTE .

RECODE F_S R_S O_S (MISSING=0) .EXECUTE .

COMPUTE Fall = 1 .CREATE Fall = CSUM(Fall) .CREATE F_S = CSUM(F_S) .CREATE R_S = CSUM(R_S) .CREATE O_S = CSUM(O_S) .EXECUTE .

SORT CASES BY Fall (D) .SELECT IF ($casenum = 1) .EXECUTE .

COMPUTE Proz_F = (100 * F_S) / (F_S + R_S) .EXECUTE .

Nach dem Gleichheitszeichensteht CSUM für den Befehl Aufaddieren. Dahinter wird inKlammern die Variable angegeben, deren Werte auf-addiert werden sollen.Wie hier gezeigt, können die Werte einer Variable auch inderselben Variable aufaddiertwerden. Zu beachten ist hier,dass dadurch die zuvor in derVariable enthaltenen Werteüberschrieben werden und damitnicht mehr vorhanden sind!

Page 27: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

GET FILE='SPEICHER01.sav' /KEEP= Zeile, S_01 .EXECUTE .

SELECT IF (Zeile = 1) .EXECUTE .

COUNT F_S = S_01 (2) .EXECUTE .COUNT R_S = S_01 (1) .EXECUTE .COUNT O_S = S_01 (0) .EXECUTE .

RECODE F_S R_S O_S (MISSING=0) .EXECUTE .

COMPUTE Fall = 1 .CREATE Fall = CSUM(Fall) .CREATE F_S = CSUM(F_S) .CREATE R_S = CSUM(R_S) .CREATE O_S = CSUM(O_S) .EXECUTE .

SORT CASES BY Fall (D) .SELECT IF ($casenum = 1) .EXECUTE .

COMPUTE Proz_F = (100 * F_S) / (F_S + R_S) .EXECUTE .

Mit SORT CASES BY werdenanhand der nachfolgend genannten Variable, hier Fall, alleFälle der Datei sortiert.Die Sortierung kann in zweiverschiedenen RichtungenVorgenommen werden. Das in Klammern stehende D steht für descend (absteigend),ein A (arise) bewirkt eine auf-steigende Sortierung.Mit SELECT IF (siehe oben) wirdhier durch $casenum auf die ganzlinks stehenden, automatisch generierten Zeilennummernabgehoben. Kurz: Es wir der erste,höchste Werte beibehalten.

Page 28: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

GET FILE='SPEICHER01.sav' /KEEP= Zeile, S_01 .EXECUTE .

SELECT IF (Zeile = 1) .EXECUTE .

COUNT F_S = S_01 (2) .EXECUTE .COUNT R_S = S_01 (1) .EXECUTE .COUNT O_S = S_01 (0) .EXECUTE .

RECODE F_S R_S O_S (MISSING=0) .EXECUTE .

COMPUTE Fall = 1 .CREATE Fall = CSUM(Fall) .CREATE F_S = CSUM(F_S) .CREATE R_S = CSUM(R_S) .CREATE O_S = CSUM(O_S) .EXECUTE .

SORT CASES BY Fall (D) .SELECT IF ($casenum = 1) .EXECUTE .

COMPUTE Proz_F = (100 * F_S) / (F_S + R_S) .EXECUTE .

COMPUTE ist quasi der Universal-befehl für die unterschiedlichsten Berechnungen. Auch hier wird wieder direkt nach dem Befehl die Zielvariable angegeben, in die die zu berechnenden Werteeingetragen werden sollen (hierProz_F). Dann wird die Berechnugnach dem Gleichheitszeichen an-gegeben: 100 mal F_S, geteiltdurch F_S plus R_S. Der einfacheDreisatz zur Berechnung derFehlerprozente.

Page 29: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

GET FILE='SPEICHER01.sav' /KEEP= Zeile, S_01 .EXECUTE .

SELECT IF (Zeile = 1) .EXECUTE .

COUNT F_S = S_01 (2) .EXECUTE .COUNT R_S = S_01 (1) .EXECUTE .COUNT O_S = S_01 (0) .EXECUTE .

RECODE F_S R_S O_S (MISSING=0) .EXECUTE .

COMPUTE Fall = 1 .CREATE Fall = CSUM(Fall) .CREATE F_S = CSUM(F_S) .CREATE R_S = CSUM(R_S) .CREATE O_S = CSUM(O_S) .EXECUTE .

SORT CASES BY Fall (D) .SELECT IF ($casenum = 1) .EXECUTE .

COMPUTE Proz_F = (100 * F_S) / (F_S + R_S) .EXECUTE .

Auf Basis der bisherigen Erklärungenkönnten jetzt für jede einzelne Berechnungdie jeweils zu verändernden Werte – per Hand! – eingesetzt werden.

Bspw. an diesen Stellen.

Dies wäre etwas komfortabler, als mit Maus undTastatur, aber immer noch recht mühsam.

Die Lösung: Nutzung von Makros

Page 30: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich
Page 31: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

31

SPSS Makros Struktur

Makro(grob)struktur Bedeutung, Funktion

DEFINE !freq1 () . Anfang der Makrodefinitionmit Name „!FREQ1“ undArgument „()“ .

descriptives Makroinhaltvar = alter fameink .

!ENDDEFINE . Ende der Makrodefinition

!freq1 . Makroaufruf

Page 32: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

32

Die variablen Teile des Programms werden in einem Makrodurch „Platzhalter“ markiert und am Ende des Programmswird in der sog. Makroexpansion festgelegt, welche Wertedie „Platzhalter“ in dem jeweiligen Programmdurchlaufannehmen sollen.

/* MAKRO zum Einlesen der Beispieldateien

DEFINE !EINLESENUEBUNGSTXT (PFAD = !charend ('§')/KLASSE = !charend('§')/PLATZ = !charend ('§') ) .

GET DATA /TYPE = TXT /FILE = !QUOTE (!PFAD) /DELCASE = LINE /DELIMITERS = "\t " /ARRANGEMENT = DELIMITED /FIRSTCASE = 1 /IMPORTCASE = ALL /VARIABLES = V1 F7.2 …

Name des Makros: MAKRO_Einlesen_UebungsDateien.sps

Page 33: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

33

!ENDDEFINE .

!EINLESENUEBUNGSTXT PFAD = C:\Dokumente und Einstellungen\Klaus Mehl\Eigene Dateien\Daten\SE_Komplexe_Daten\School performance_Klasse_A.txt § KLASSE = 'A' §PLATZ = C:\Dokumente und Einstellungen\Klaus Mehl\Eigene Dateien\Daten\SE_Komplexe_Daten\School performance_Klasse_A.sav § .

An Ende des Programmaufrufs werden die Werte, die durch „Platzhalter“ beim Programmdurchlauf einnehmen sollendefiniert.

Name des Makros: MAKRO_Einlesen_UebungsDateien.sps

Page 34: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

34

Was bedeutet „TOKENS“? (engl. „Zeichen)

Mit der Option !TOKENS werden die nächsten n Tokensim Makroaufruf dem Argument bzw. den Argumentenzugewiesen.Als Elemente zählen Variablen, Zahlen, Strings usw.:

Beschreibung Beispiele Anzahl Tokens und Erläuterungen

Variablenliste Var1 Var2 Var3 3 (jeder Variablenname zählt als ein einzelnes Token)

Werteliste 2 5 5.22 0.005 4 (jede Zahl zählt als einzelnes Token)

Zeichenliste und Kommas

A , b 3 (ein Komma wird als separates Token gezählt; Groß-/Kleinschreibung ist unerheblich)

Page 35: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

35

Bei !TOKENS sind das Ausrufezeichen und die Anzahln in einer Klammer wichtig. n entspricht positivenganzzahligen Werten. Die Option !TOKENS-Option istalso nützlich, wenn die Anzahl der Token bekannt undkonstant ist. Bei der Festlegung der Anzahl der Tokensind Besonderheiten bei der „Zählweise“ von Token zu berücksichtigen:

Beschreibung Beispiele Anzahl Tokens und Erläuterungen

Anführungs-zeichen

„Alter ..“ ‚cc 00 cd‘ 2 (Inhalte zwischen paarigen Anführungszeichen bzw. Hoch-kommatas zählen als ein Token)

Zeichen-kombinationen

11A 2 (Zahl vor String)

A11 1 (String vor Zahl)

Page 36: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

36

In dem Beispiel Makro MACRO_Einfaches_Beispiel wird nach

den Namensargumenten Var1 und Var2 unmittelbarnach einem notwendigen =-Zeichen die Option!TOKENS(1) angegeben. Während der sog. Makro-expansion greift !AUSWERTUNG auf die Vorgaben zurück, die durch dieses Argument festgelegt wurden,nämlich eine Variable Var1 und eine Variable Var2bereitzustellen.Die Information „ein Zeichen“ wird daher mit der Zu-weisung zur gleichen Anzahl an Variablen zumArgument im Makroaufruf für die Analyse verknüpft.

Page 37: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

37

/* Einfaches erstes Beispiel für eine Makro-Programmierung

DEFINE !Auswertung (VAR1 = !TOKENS(1)/ VAR2 = !TOKENS(1)) .

GET FILE='C:\Programme\SPSS\1993 US Sozialerhebung (Teilmenge).sav'.EXECUTE .

GRAPH /SCATTERPLOTT(BIVAR)= !VAR1 WITH !VAR2 .

!ENDDEFINE .

!AUSWERTUNG VAR1=alter VAR2= kinder .!AUSWERTUNG VAR1=alter VAR2= zeitung .!AUSWERTUNG VAR1=einkom91 VAR2= alter .

/* GRAPH/* /SCATTERPLOT(BIVAR)=alter WITH kinder/* /MISSING=LISTWISE .

Name des Macros: MACRO_Einfaches_Beispiel

Ein Beispiel:

Page 38: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

38

In diesem Makro „MACRO_Einfaches_Beispiel“ wird oben fest-gelegt, dass den beiden Platzhaltern VAR1 und VAR2 Zeichenim Umfang von einem Zeichen zugeordnet werden. In den Befehl zum Erstellen eines Scatterplotts werden dannkeine Variablennamen, sondern nur die Platzhalter gesetzt.

/* Einfaches erstes Beispiel für eine Makro-Programmierung

DEFINE !Auswertung (VAR1 = !TOKENS(1)/ VAR2 = !TOKENS(1)) .

GET FILE='C:\Programme\SPSS\1993 US Sozialerhebung (Teilmenge).sav'.EXECUTE .

GRAPH /SCATTERPLOTT(BIVAR)= !VAR1 WITH !VAR2 .

!ENDDEFINE .

!AUSWERTUNG VAR1=alter VAR2= kinder .!AUSWERTUNG VAR1=alter VAR2= zeitung .!AUSWERTUNG VAR1=einkom91 VAR2= alter .

/* GRAPH/* /SCATTERPLOT(BIVAR)=alter WITH kinder/* /MISSING=LISTWISE .

Was an Stelle derPlatzhalter bei jedemDurchlauf gesetztwerden soll, wird andieser Stelle fest-gelegt.

Page 39: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

39

!CHAREND („Zeichen“) – Listen durch ein einzelnes Zeichen

Mittels !CHAREND werden alle Tokens bis zu einem explizitfestzulegenden Zeichen in einem Makroaufruf dem Argumentzugewiesen und ausgeführt.Bei diesem Zeichen muss es sich um ein einzelnes Zeichen (String mit der Länge 1) handeln, das zwischen Hochkommataund in Klammern steht. Im Prinzip kann jedes beliebige Zeichenals Trennzeichen eingesetzt werden. Die SPSS CommandSyntax Reference (2004) verwendet z.B. einen sog. Slash ‚/‘, umeine Trennung zu signalisieren.Dieser Slash hat also nichts mit dem Trennungszeichen zu tun,das zwischen zwei Argumentdefinitionen stehen muss; um eineVerwechslung zu vermeiden, wird empfohlen, als Zeichen keinenSlash, sondern ein beliebiges anderes Zeichen zu nehmen, bspw. ‚§‘.

Page 40: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

40

Bei !CHAREND-Trennungszeichen ist ihre richtige Position absolut entscheidend. Eine falsche Position führt dazu, dassdiese Positions- oder auch Namensargumente beim Aufruf desMakros falsche Token-Zusammenstellungen an SPSS über-geben. !CHAREND-Optionen sind v.a. bei positionalen Argumenten nützlich, können jedoch auch bei Namens-argumenten eingesetzt werden.

DEFINE !Beispiel1 (key1 = !CHAREND (‚§‘) / key2 = !CHAREND (‚§‘) ).

frequencies var = !key1 .descriptives var = !key2 .

!ENDDEFINE .

!Beispiel1 KEY1=familienstand ausbild abschluss geschl § KEY2=alter § .

Page 41: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

41

/* Einfaches zweites Beispiel für eine Makro-Programmierung

DEFINE !Auswertung1 (VAR1 = !TOKENS(1)/ VAR2 = !TOKENS(1)/VAR3 =TOKENS(1)) .

GET FILE='C:\Programme\SPSS\1993 US Sozialerhebung (Teilmenge).sav'.EXECUTE .

CROSSTABS /TABLES= !VAR1 BY !VAR2 BY !VAR3 /FORMAT= AVALUE TABLES /CELLS= COUNT EXPECTED ROW COLUMN TOTAL /COUNT ROUND CELL .!ENDDEFINE .

!AUSWERTUNG1 VAR1= famstand VAR2 = leben VAR3 = ethgr .

Name des Macros: MACRO_Einfaches_Beispiel2

Ein Beispiel dazu:

Page 42: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

42

Eine weitere Möglichkeit die hier Erwähnung finden soll ist dieVerwendung sog. positionaler Argumente.Dabei wird, wie in dem folgenden Beispiel gezeigt, durch denBefehl !POS und dem Zusatz !TOKENS die Möglichkeitgeschaffen, durch die Benennung der Platzhalter in Form von!1 oder !2 etc. das Programm anzuweisen, den ersten Wert(durch !1), den zweiten Wert (durch !2) etc. aus der Reiheder aufgelisteten Tokens in das Programm aufzunehmen.

Page 43: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

43

/* Ein drittes Beispiel für eine Makro-Programmierung

DEFINE !Auswertung1 (!POS = !TOKENS(1)/ !POS = !TOKENS(1)/!POS = !TOKENS(1)) .

GET FILE='C:\Programme\SPSS\1993 US Sozialerhebung (Teilmenge).sav'.EXECUTE .

CROSSTABS /TABLES= !1 BY !2 BY !3 /FORMAT= AVALUE TABLES /CELLS= COUNT EXPECTED ROW COLUMN TOTAL /COUNT ROUND CELL .!ENDDEFINE .

!AUSWERTUNG1 famstand leben ethgr .!AUSWERTUNG1 famstand todesstr ethgr . !AUSWERTUNG1 famstand todesstr sternzei .

Name des Macros: MACRO_Einfaches_Beispiel3

Page 44: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

44

Die bislang vorgestellten Optionen erforderten es, dass die Anzahlund/oder Stellung der Platzhalter in der Definition festlag und bekannt war.

Eine oft sehr nützliche Alternative zu dieser Option stellt der Befehl !CHAREND dar. Ein Beispiel für diesen bereits erläuterten Befehls folgt in dem nächsten Makro.

Das besondere und neue an diesem nächsten Beispiel ist jedochdie Einführung von einer Schleife, einem sog. Loop. Was bewirkenbzw. können solche Loops?

Während in den bisherigen Beispielen für jeden Durchlauf desgestarteten Makros die dabei einzusetzenden Variablenwertefestgelegt werden mussten, werden bei einem Loop, genauermit Hilfe eines sog. List-Processing-Loops eine (nahezu unbegrenzte) Menge von Werten vorgegeben, die dann auto-matisch der Reihe nach eingesetzt werden.

Page 45: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

45

Schematisch lässt sich das Ganze so darstellen:

Am Anfang eines solchen Loops steht der Befehl !DO gefolgtvon der Bezeichnung des Platzhalters der einzusetzendenVariablen, bspw. !VAR, dann folgt der Befehl !IN und schließ-lich wird der Platz angegeben, an dem die einzusetzenden Werte oder Zeichen stehen, bspw. (LISTE). Das Ende derSchleife, des Loops wird durch den Befehl !DOEND ange-geben:

!DO !VAR !IN (LISTE)

-Befehle –

!DOEND

Page 46: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

46

!DO !VAR !IN (LISTE)

Select if (ALTER > !VAR)

CROSSTABS /TABLES= Gehalt BY Hausbesitz /FORMAT= AVALUE TABLES /CELLS= COUNT EXPECTED ROW COLUMN TOTAL /COUNT ROUND CELL .

!DOEND

LISTE = 30 40 50 60

In dieser schematischen Darstellung würden also alle vier Werteaus der „Liste“ automatisch nacheinander in die Berechnung ein-gesetzt werden.

Page 47: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

47

/* Ein fünftes Beispiel für eine Makro-Programmierung mit einer Schleife/* SET PRINTBACK=ON MPRINT=ON .

DEFINE !Auswertung3 (LISTE1 = !CHAREND ('/')/ VAR1 = !TOKENS(1)) .

GET FILE='C:\Programme\SPSS\1993 US Sozialerhebung (Teilmenge).sav'.EXECUTE .

!DO !WERT1 !IN (!LISTE1) .

CROSSTABS /TABLES= !WERT1 BY !VAR1 /FORMAT= AVALUE TABLES /CELLS= COUNT EXPECTED ROW COLUMN TOTAL /COUNT ROUND CELL .

!DOEND .

!ENDDEFINE .

!AUSWERTUNG3 LISTE1 = famstand beschäft partei sternzei / VAR1 = todesstr .

Name des Macros: MACRO_Einfaches_Beispiel5

Page 48: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

48

/* Ein fünftes Beispiel für eine Makro-Programmierung mit einer Schleife/* SET PRINTBACK=ON MPRINT=ON .

DEFINE !Auswertung3 (LISTE1 = !CHAREND ('/')/ VAR1 = !TOKENS(1)) .

GET FILE='C:\Programme\SPSS\1993 US Sozialerhebung (Teilmenge).sav'.EXECUTE .

!DO !WERT1 !IN (!LISTE1) .

CROSSTABS /TABLES= !WERT1 BY !VAR1 /FORMAT= AVALUE TABLES /CELLS= COUNT EXPECTED ROW COLUMN TOTAL /COUNT ROUND CELL .

!DOEND .

!ENDDEFINE .

!AUSWERTUNG3 LISTE1 = famstand beschäft partei sternzei alterhei geschw kinder alter gebmonat sternzei ausbild abschlus vaterab mutterab geschl ethgr einkom91 einkbefr region ort einwohn partei wahl92 einstell todesstr waffen gras religion leben kindid pille sexualkd prügel sterbehi zeitung tvstunde bigband blugrass country blues musicals klassik folk jazz opern rap hvymetal sport kultur tvshows tvnews tvpbs wissen4 partner sexfreq wohnen soi gebjahr fameink schulab altergr politik region4 verheira classic3 jazz3 rap3 blues3 /VAR1 = todesstr .

Name des Macros: MACRO_Einfaches_Beispiel5a

Page 49: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

49

Was zunächst sehr kompliziert zu klingen scheint ist jedochin den meisten Fällen eher einfach und sehr nützlich: Es lassensich (nahezu) unbegrenzt viele Schleifen miteinanderverschachteln:

LOOP I LOOP II

Das nächste Makrodemonstriert diese Möglichkeit. Zuerstwird das erste Zeichender Liste1 eingesetzt,dann das erste Zeichender Liste2, dann daszweite Zeichen derListe2 usw. Sind alleZeichen der Liste2 durch, wird das zweiteZeichen der Liste1eingesetzt usw. usw.

Page 50: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

50

/* Ein viertes Beispiel für eine Makro-Programmierung mit zwei ineinander/* verschachtelten Schleifen/* SET PRINTBACK=ON MPRINT=ON .

DEFINE !Auswertung3 (LISTE1 = !CHAREND ('/')/ LISTE2 = !CHAREND ('§')) .

GET FILE='C:\Programme\SPSS\1993 US Sozialerhebung (Teilmenge).sav' .EXECUTE .

!DO !WERT1 !IN (!LISTE1) .

!DO !WERT2 !IN (!LISTE2) .

CROSSTABS /TABLES= !WERT1 BY !WERT2 /FORMAT= AVALUE TABLES /CELLS= COUNT EXPECTED ROW COLUMN TOTAL /COUNT ROUND CELL .

!DOEND .

!DOEND .

!ENDDEFINE .

!AUSWERTUNG3 LISTE1 = famstand beschäft partei / LISTE2 = todesstr sternzei § .

Nam

e de

s M

acro

s: M

ACRO

_Ein

fach

es_B

eisp

iel4

Page 51: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

51

Eine weitere Möglichkeit der Schleifenkonstruktion ist die eines sog. Index-Loop. Beim Index-Loop wird bei einem Zähler mitdem Wert 1 gestartet und im Allgemeinen in n+1-Schrittensolange wiederholt, bis ein bestimmter (Index-) Wert erreicht ist.

!DO !var = (Anfang) !TO (Ende) [optional: !BY (Schritt)]- Befehle -!DOEND

Das folgende Makro zeigt ein Beispiel für einen solchen Index-Loop, mit dem sechs zusätzliche Variablen mit den Namenneu1var bis neu6var generiert werden:

Im Anschluss an dieses Beispiel wird der bislang noch nichteingeführte Befehl !CONCAT erläutert.

Page 52: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

52

/* Ein sechstes Beispiel für eine Makro-Programmierung mit einer Index-Schleife/* SET PRINTBACK=ON MPRINT=ON .

DEFINE !LOOP1 (key1 = !TOKENS(1)/key2 = !TOKENS(1)) .

!DO !i = !KEY1 !TO !KEY2 .

COMPUTE !CONCAT (neu, !i, var) = normal (1) .

!DOEND .

!ENDDEFINE .

!LOOP1 Key1 = 1 Key2 = 6 .

Name des Macros: MACRO_Einfaches_Beispiel6

Page 53: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

53

Stringfunktionen und einige ihrer Variationsmöglichkeiten

Syntax für Strings Funktion, Rückmeldung und Beispiel

!LENGTH (String) Länge des angegebenen Strings. Bsp.: !LENGTH(Hello). Ergebnis: 5

!CONCAT (String1, String2, …)

Aneinanderkettung der zusammenzu-führenden Strings. Bsp.: !CONCAT(hel, lo). Ergebnis: Hello

!QUOTE (String) Das Argument wird in Anführungs-zeichen gesetzt. Bsp.: !QUOTE(Hello).Ergebnis: „Hello“

!SUBSTR (String, FROM, [Länge])

Abschnitt des Strings, der ab FROM startet und bei nicht festgelegter Länge bis zum Stringende geht

Bsp.: !SUBSTR(Hello, 3) Ergebnis: „LLO“

Page 54: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

54

Eine weitere Anwendung von Makros:

Das Zusammenführen von ausgesuchten Variablen aus verschiedenen Dateien:

• Dazu müssen die einzelnen Dateien nacheinander aufgerufen werden• Dabei werden nur die Variablen geladen, die von Interesse sind• Die Auswahl der Variablen wird in einer (Zwischen-)Datei abgelegt• Der nächste Datensatz wird aufgerufen, die Variablen ausgesucht etc.• Der Datensatz wird mit den Daten in der Zwischendatei verbunden• Wenn alle Datei „durchkämmt“ sind, ist der Datensatz „fertig“

Beispiel:

Page 55: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

55

/* Ein siebentes Beispiel für eine Makro-Programmierung zum Zusammenfügen verschiedener Datensätze/* SET PRINTBACK=ON MPRINT=ON .

GET FILE='C:\Dokumente und Einstellungen\Klaus Mehl\Eigene Dateien\Daten\SE_Komplexe_Daten\1991 US Sozialerhebung.sav' /KEEP = kinder .EXECUTE .

COMPUTE YEAR = 1991 .FORMATS YEAR (F 1.0) .EXECUTE .

SAVE OUTFILE='C:\Dokumente und Einstellungen\Klaus Mehl\Eigene Dateien\Daten\SE_Komplexe_Daten\SPEICHER01.sav' .EXECUTE .

DEFINE !Zusammen1 (PFAD = !CHAREND ('/')/ WERT1 = !CHAREND ('§')) .

GET FILE= !QUOTE(!PFAD)/KEEP = kinder .EXECUTE .

COMPUTE YEAR = !WERT1 .FORMATS YEAR (F 1.0) .EXECUTE .

ADD FILES /FILE=* /* Alternative: MATCH/FILE='C:\Dokumente und Einstellungen\Klaus Mehl\Eigene Dateien\Daten\SE_Komplexe_Daten\SPEICHER01.sav' . EXECUTE .SAVE OUTFILE='C:\Dokumente und Einstellungen\Klaus Mehl\Eigene Dateien\Daten\SE_Komplexe_Daten\SPEICHER01.sav' .EXECUTE .

!ENDDEFINE .

!Zusammen1PFAD = C:\Dokumente und Einstellungen\Klaus Mehl\Eigene Dateien\Daten\SE_Komplexe_Daten\1993 US Sozialerhebung (Teilmenge).sav / WERT1 = 1993 § .

!Zusammen1PFAD = C:\Dokumente und Einstellungen\Klaus Mehl\Eigene Dateien\Daten\SE_Komplexe_Daten\Mehl Fake.sav / WERT1 = 2000 § .

Nam

e de

s M

acro

s: M

ACRO

_Ein

fach

es_B

eisp

iel7

Page 56: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

56

/* Ein achtes Beispiel für eine Makro-Programmierung zum Berechnen des Mittelwertes /* SET PRINTBACK=ON MPRINT=ON .

GET FILE='C:\Dokumente und Einstellungen\Klaus Mehl\Eigene Dateien\Daten\SE_Komplexe_Daten\SPEICHER01.sav' .EXECUTE .

SELECT IF (YEAR = 2000) .EXECUTE .

COMPUTE Fall = 1 .EXECUTE .

CREATE SUMFall = CSUM(Fall) .EXECUTE .CREATE SUMChild = CSUM(Kinder) .EXECUTE .SORT CASES BY SUMfall (D) .SELECT IF ($casenum = 1) .COMPUTE MEANChild = SUMChild/SUMFall .EXECUTE .

RENAME VARIABLES (MEANChild = MEANChild2000) .EXECUTE .

SAVE OUTFILE='C:\Dokumente und Einstellungen\Klaus Mehl\Eigene Dateien\Daten\SE_Komplexe_Daten\SPEICHER02.sav' / KEEP= MEANChild2000 .EXECUTE .

/* HIER BEGINNT DAS MAKRO !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Name des Macros: MACRO_Einfaches_Beispiel8; Fortsetzung nächste Seite ↓

Page 57: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

57

DEFINE !Mittelwerte1 (LISTE1 = !CHAREND ('/')) .

!DO !Jahr !IN (!LISTE1) .

GET FILE='C:\Dokumente und Einstellungen\Klaus Mehl\Eigene Dateien\Daten\SE_Komplexe_Daten\SPEICHER01.sav' .EXECUTE .

SELECT IF (YEAR = !Jahr) .EXECUTE .

COMPUTE Fall = 1 .EXECUTE .

CREATE SUMFall = CSUM(Fall) .CREATE SUMChild = CSUM(Kinder) .SORT CASES BY SUMFall (D) .SELECT IF ($casenum = 1) .COMPUTE MEANChild = SUMChild/SUMFall .EXECUTE .

RENAME VARIABLES (MEANChild = !CONCAT(MEANChild, !Jahr)) .EXECUTE .

MATCH FILES /FILE=*/FILE='C:\Dokumente und Einstellungen\Klaus Mehl\Eigene Dateien\Daten\SE_Komplexe_Daten\SPEICHER02.sav' /DROP = Fall, SUMFall, SUMChild, YEAR, Kinder .EXECUTE .SAVE OUTFILE='C:\Dokumente und Einstellungen\Klaus Mehl\Eigene Dateien\Daten\SE_Komplexe_Daten\SPEICHER02.sav' . EXECUTE .

!DOEND .

SAVE OUTFILE='C:\Dokumente und Einstellungen\Klaus Mehl\Eigene Dateien\Daten\SE_Komplexe_Daten\SPEICHER02.sav' . EXECUTE .

!ENDDEFINE .

!Mittelwerte1 LISTE1 = 1993 1991 / .

Page 58: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

58

• Auswahl relevanter Variablen• Berechnungen

• Auswahl relevanter Variablen• Berechnungen

Die schematische Logik dieser Variante:

Ursprungs-Datei

Datei als Zwischenablage

Ziel-Datei

• Auswahl relevanter Variablen• Berechnungen

12345678

98765432

Add

Match

12345678 98765432

Page 59: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

59

Wie lassen sich nun aus diese Art und Weise zusammengestellteDateien weiterverarbeiten?

Eine Möglichkeit, die ausführlicher, d.h. nicht mit der maximal möglichen Eleganz vorgestellt wird (weil noch zu komplex), istdas Berechnen von Mittelwerten:

∑ aller Werte : Anzahl der Werte

Dazu ist es wichtig, die Funktionen Lag und Lead einzuführen:

X Lag Lead

198 . 220

220 198 305

305 220 470

470 305

Page 60: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

60

COMPUTE Fall = 1 .EXECUTE .

/* ALTERNATIVE: COMPUTE Fall = $casenum ./* SELECT IF (Kinder = 4) .

IF ($casenum >1) Fall = Lag(Fall, 1) + Fall .EXECUTE .

SORT CASES BY Fall (D) . /* ALTERNATIV: (A)EXECUTE .

SELECT IF ($casenum = 1) .EXECUTE .

COUNT Anzahl_2 = var001 (2) .EXECUTE .

Name der Syntax: Syntaxbeispiel_Zählen_Sortieren_Auswählen

Anmerkungen:

• Bitte vergleichen mit „create“

• „$casenum“ verweist auf die Fallnummern am linken Rand der Datenmaske

• Lag(XYZ, 1) = die Zahl gibt den Abstand an: 1 = nächste Zeile; 2 = übernächste Zeile

• „D“ = down „A“ = up

• Setzt in eine Variable Anzahl_2 die Anzahl der Werte ‚2‘ der Variable var001 ein(siehe auch Syntax Befehlsdefinitionen)

Page 61: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

61

Häufigkeiten zählen mit dem Befehl „COUNT“:

Allgemeine Syntax: COUNT Zielvariable = Quellvariable(n) (Werteliste)

Zu zählende Werte Beschreibung

Einzelwerte 1 2 3 4 5

Alle fehlenden Werte missing

Systemdefinierte fehlende Werte sysmis

Wertebereiche: … bis … 5 thru 10

Wertebereiche: kleinster bis … lowest thru 0

Wertebereiche: … bis größter Wert 100 thru highest

Page 62: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

62

CREATEFunction keywords:

CSUM Cumulative sumDIFF DifferenceFFT Fast Fourier transformIFFT Inverse fast Fourier transformLAG LagLEAD LeadMA Centered moving averagesPMA Prior moving averagesRMED Running mediansSDIFF Seasonal differenceT4253H Smoothing

ACHTUNG, ganz WICHTIG!!!

CREATE bezieht sich wie folgtauf die Spalten:

Page 63: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

63

ACHTUNG, ganz WICHTIG!!!

COMPUTE bezieht sich dagegen fast – aber leider nicht immer – wie folgtauf die Zeilen:

Befehl

COMPUTE

Page 64: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

64

COMPUTE

COMPUTE target variable=expression

ExampleCOMPUTE newvar1=var1+var2.COMPUTE newvar2=RND(MEAN(var1 to var4).COMPUTE logicalVar=(var1>5).STRING newString (A10).COMPUTE newString=CONCAT((RTRIM(stringVar1), stringVar2).Functions and operators available for COMPUTE are described in “Transformation Expressions”on p. 44.

ABS(arg) Absolute value. ABS(SCALE) is 4.7 when SCALE equals 4.7 or –4.7.RND(arg) Round the absolute value to an integer and reaffix the sign. RND(SCALE) is–5 when SCALE equals –4.7.TRUNC(arg) Truncate to an integer. TRUNC(SCALE) is –4 when SCALE equals –4.7.MOD(arg,arg) Remainder (modulo) of the first argument divided by the second. When YEARequals 1983, MOD(YEAR,100) is 83.SQRT(arg) Square root. SQRT(SIBS) is 1.41 when SIBS equals 2.EXP(arg) Exponential. e is raised to the power of the argument. EXP(VARA) is 7.39when VARA equals 2.LG10(arg) Base 10 logarithm. LG10(VARB) is 0.48 when VARB equals 3.LN(arg) Natural or Naperian logarithm (base e). LN(VARC) is 2.30 when VARC equals10.LNGAMMA(arg) Logarithm (base e) of complete Gamma function.ARSIN(arg) Arcsine. (Alias ASIN.) The result is given in radians. ARSIN(ANG) is 1.57when ANG equals 1.ARTAN(arg) Arctangent. (Alias ATAN.) The result is given in radians. ARTAN(ANG2) is0.79 when ANG2 equals 1.SIN(arg) Sine. The argument must be specified in radians. SIN(VARD) is 0.84 whenVARD equals 1.COS(arg) Cosine. The argument must be specified in radians. COS(VARE) is 0.54 whenVARE equals 1.

Page 65: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

65

SUM(arg list) Sum of the nonmissing values across the argument list.MEAN(arg list) Mean of the nonmissing values across the argument list.SD(arg list) Standard deviation of the nonmissing values across the argument list.VARIANCE(arg list) Variance of the nonmissing values across the argument list.CFVAR(arg list) Coefficient of variation of the nonmissing values across the argument list.The coefficient of variation is the standard deviation divided by the mean.MIN(arg list) Minimum nonmissing value across the argument list.MAX(arg list) Maximum nonmissing value across the argument list.

COMPUTE - Befehle

The following arithmetic operators are available:+ Addition– Subtraction* Multiplication/ Division** Exponentiation

Page 66: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

66

Aufgabe 1:

Stellen Sie eine neue Datei zusammen, die Variablen enthält, die dieAnzahl von 1, 2 und 3 Kindern in den Dateien • 1991 US Sozialerhebung.sav• 1993 US Sozialerhebung (Teilmenge).sav• Mehl Fake.sav

wiedergeben:

oder:

Ein_Kind_1991 Zwei_Kind_1991 Drei_Kind_1991 ….

29 4 34

Jahr Ein_Kind Zwei_Kinder Drei_Kinder

1991 29 4 34

1993

Page 67: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

67

Probleme: Wie muss die Grobstruktur des Programms aussehen?Makrodefinition (2 Loops)

Zweite Schleife (Anzahl Kinder)• Variablenauswahl, Werteselektion

• Berechnen• Sortieren• Renamen

• Matchen (Variablen hinzufügen)• Im Zwischenspeicher ablegen

Ende der ersten Schleife

Erste Schleife (Jahr)

• Adden (cases hinzufügen)• Um cases erweiterte Datei ablegen

Ende der zweiten Schleife

Makroende

Page 68: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

68

Regeln für die Vergabe von Variablennamen:

• Variablennamen können aus Buchstaben und Ziffern gebildet werden. Erlaubt sindferner die Sonderzeichen _ (underscore), . (Punkt) sowie die Zeichen @, #, $Nicht erlaubt sind Leerzeichen sowie spezifische Zeichen, wie !, ?, » und *.• Der Variablenname muss mit einem Buchstaben beginnen. Erlaubt ist ferner dasSonderzeichen @.• Das letzte Zeichen darf kein Punkt und sollte kein _ (underscore) sein, um Konfliktemit speziellen Variablen, die von SPSS-Prozeduren angelegt werden, zu vermeiden.•Der Variablenname darf (ab der Version 12) max 64 Zeichen lang sein.• Variablennamen sind nicht case-sensitive, d.h. die Groß- und Kleinschreibungist nicht relevant.• Variablennamen dürfen nicht doppelt vergeben werden.• Reservierte Schlüsselwörter können nicht als Variablennamen verwendet werden.Zu den reservierten Schlüsselwörtern zählen: ALL, AND, BY, EQ, GE, GT, LE, LT,NE, NOT, OR, TO, WITH.

Beispiele für ungültige Variablennamen:

1mal1 Bühl&Zöfel Stand 94 Wagen!

Page 69: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

69

Kommen wir jetzt auf das Eingangs-Beispiel d² - Test zurück:

• Wie lässt sich für jedes Feld der %-Anteil einer fehlerhaften Bearbeitung berechnen?• Ein erster Schritt wäre es, eine Datei mit allen Fällen der einzelnen Dateien zusammenzustellen, die vollständige Id‘s enthält• Dann, Spalte für Spalte, alle Zeilen einzeln aller Bearbeitungen zu betrachten und zusammenzuzählen, wie oft dort eine 1 (fehlerfrei) oder eine 2 (Fehler) ein- getragen wurde.• Schließlich wird die Summe aller Werte > 1 und die Summe aller Werte = 2 ermittelt• Auf dieser Grundlage ergibt sich dann der %-Anteil

Page 70: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

70

/* Makro zum Ersetzen/Ausfüllen der Id-Nummern/* SET PRINTBACK=ON MPRINT=ON .

CD 'C:\Dokumente und Einstellungen\Klaus Mehl\Eigene Dateien\Daten\D_Zwei' . ERASE FILE = 'SPEICHER01.sav' .

DEFINE !Vervollstaendigen (LISTE = !CHAREND ('/')) .

!DO !Datei !IN (!LISTE) .

GET FILE= !Datei .EXECUTE .

RECODE ID (MISSING=0) .EXECUTE .

IF ((Zeile > 0) & ($casenum > 1)) Id = Id + Lag(Id, 1) .EXECUTE .

ADD FILES /FILE=*/FILE='SPEICHER01.sav' .EXECUTE .SAVE OUTFILE= 'SPEICHER01.sav' . EXECUTE .

!DOEND .

!ENDDEFINE .

!VervollstaendigenListe = 'Daten-Mi-10.sav' 'Daten-Mi-11.sav' 'Daten-Mi-12.sav' 'Daten-Mi-13.sav' 'Daten-Mi-14.sav' 'Daten-Mi-15.sav' 'Daten-Mi-16.sav' 'Daten-Mi-17.sav' 'Daten-Mi-18.sav' 'Daten-Mo-01.sav' 'Daten-Mo-02.sav' / .

Page 71: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

71

Anhand dieser Datei aller Bearbeitungen gilt es jetzt eineStruktur wie die folgende zu erstellen:

Spalte S_01, Zeile 1 des ersten Testteilnehmers

Spalte S_01, Zeile 1 des zweiten Testteilnehmers

Spalte S_01, Zeile 1 des letzten Testteilnehmers

Datei der Datenaller

Bearbeitungen

Page 72: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

72

Sind auf diese Art und Weise die Werte Zeile 1, Spalte S_01zusammengestellt, gilt es die Werte ‚1‘ und ‚2‘ zu erfassen undzusammenzuzählen, etwa auf diesem Weg:

S_01 F_S R_S O_S

0 . . 1

1 . 1 .

0 . . 1

2 1 . .

COUNT F_S = S_01 (2) .EXECUTE .COUNT R_S = S_01 (1) .EXECUTE .COUNT O_S = S_01 (0) .EXECUTE .

Page 73: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

73

Um die Summe der F_S, R_S und O_S zusammenzuaddierengibt es – wie immer – verschiedene Wege. Zunächst müssendie Missing Values in die Werte ‚0‘ umkodiert werden:

RECODE F_S R_S O_S (MISSING=0) .EXECUTE .

Dann kann mit dem Befehl:

CREATE Fall = CSUM(Fall) .CREATE F_S = CSUM(F_S) .CREATE R_S = CSUM(R_S) .CREATE O_S = CSUM(O_S) .EXECUTE .

oder

Page 74: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

74

S_01 F_S R_S O_S

0 . . 1

1 . 1 .

0 . . 1

2 1 . .

Mit der Anweisung:

IF ($casenum > 1) F_S = LAG(F_S, 1) + F_S .EXECUTE .

gearbeitet werden. Ihnen ist sicher das Aufaddieren einer Variablen ‚Fall‘ aufgefallen – die zuvor auf den Wert ‚1‘ gesetztwurde. Diese Variable dient dazu, die letzte Zeile in der Dateizu bestimmen, um den Sortierbefehl richtig anwenden zukönnen. Dieser Befehl lautet:

Page 75: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

75

SORT CASES BY Fall (D) .SELECT IF ($casenum = 1) .EXECUTE .

Mit der ersten Zeile werden die Werte von Fall absteigend (D)sortiert, so dass die höchsten Werte alle in der ersten Zeile stehen. Dann wird die erste Zeile ausgewählt – die anderensind in diesem Moment verschwunden!

Die gewünschte Berechnung erfolgt durch diesen Befehl:

COMPUTE Proz_F = (100 * F_S) / (F_S + R_S) .EXECUTE .

Damit haben wir den Prozentanteil der Fehler beim Bearbeitender ersten Zeile der Spalte S_01 berechnet.

Page 76: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich

76

Damit ist aber noch nicht das Ende erreicht. Um zu markieren,welchen Wert wir jetzt berechnet haben, nennen wir die VariableProz_F um in die Variable ProzF_S_01 – die Variable Proz_F istdamit nicht mehr im Bestand der Datei!!Schließlich speichern wir in einer Zwischendatei den berechnetenWert und werfen mit DROP alle Variablen raus, die wir nichtbenötigen:

RENAME VARIABLES (Proz_F = !CONCAT(ProzF_, !Spalte)) .EXECUTE .

MATCH FILES /FILE=*/FILE='SPEICHER02.sav' /DROP = Id, Fall, R_S, O_S, F_S, !Spalte .EXECUTE .SAVE OUTFILE='SPEICHER02.sav' . EXECUTE .

Page 77: Die folgenden Folien beinhalten Erläuterungen, die einen Inhalt des Seminars Fehler in der Schule – Schülerfehler unterstützen sollen: Die Frage, wie sich