Hallo allerseits,
ich habe folgendes Problem und wäre euch dankbar wenn ihr mir dabei helfen könntet dieses zu lösen.
Ich möchte von einem größeren Datensatz eine Variable (deren Werte ja in einer Spalte aufgelistet sind) in eine neue Matrix umwandeln, wobei diese eine benutzerdefineirte Dimension (Spalten- und Reihenzahl) haben sollte. Mathematisch gesehen handelt es sich also um eine Umwandlung von einem zweidimensionalen Vektor in eine Matrix.
Um mein Anliegen zu verdeutlichen, demonstriere ich es mal an einem einfachen Beispiel. A sei die Ausgangsvariable mit 10 Fällen, B die neue Matrix mit 2 Spalten und 5 Reihen:
A = [1; 2; 3; 4; 5; 6; 7; 8; 9; 10]
wird zu
B = [1 2; 3 4; 5 6; 7 8; 9 10]
Ist es möglich diese Transformation über den Syntax-Editor in SPSS zu steuern?
Ich weiß, dass sich dies ganz einfach in Matlab machen lässt. Hier wäre bei obigem Bespiel die Lösung:
B = Reshape(A', 5, 2)
wobei A' eine Transponierung des Vektors bedeutet und 5 und 2 die Zeilen- bzw. Spaltenzahl definiert.
Da ich innerhalb der SPSS-Umgebung weiterarbeiten möchte, wäre ich euch dankbar, wenn ihr mir eine Syntax-Lösung für dieses Vorhaben anbieten könntet!
Besten Dank im Voraus!
Gruß,
Holger
Variable (Spalte) in neue Matrix konvertieren (SPSS-Syntax?)
-
Holger
- Beiträge: 2
- Registriert: 01.12.2010, 14:49
-
Holger
- Beiträge: 2
- Registriert: 01.12.2010, 14:49
etwas weiter als gestern...
Hallo nochmals,
bei obigem Problem bin ich etwas weitergekommen und könnte es für kleine Fallzahlen lösen! Bei größeren Fallzahlen ist dies jedoch manuell nicht durchführbar. Kann mir hier jemand weiterhelfen?
Über die Umstrukturierungsfunktion lässt sich mittels einer Hilfsvariablen eine Spalte mit unterschiedlichsten Werten in eine Matrix konvertieren. Aber bis jetzt kann ich das nur für kleine Fallzahlen machen
Dabei gibt man den Fällen, die hintereinander in einer gemeinsame Reihe bei der neuen Matrix stehen sollen, einen gleichen Wert in der Hilfsvariablen.
z.B. 3 Werte (bzw. spätere Zeilenzahl der Matrix) bei 6 Fällen
Wert Hilfsvariable
2324 1
2335 1
8953 2
5645 2
8945 3
5656 3
Die Matrix, die sich dann über die Umstrukturierungsfunktion erstellen lässt, schreibt dann alle Werte (in der unveränderten Reihenfolge), die den gleichen Wert der Hilfsvariablen haben, hintereinander in eine Reihe und beginnt in der nächste Zeile, wenn sich der Wert der Hilfsvariablen ändert bzw. sich erhöht. Das richtige Ergebnis ist also dann:
[2324 2335; 8953 5645; 8945 5656]
Genau hier liegt aber das Problem bei großen Fallzahlen (> 1000 Fälle). Händisch kann man hier nämlich nicht vorgehen um eine Hilfsvariable zu bilden, die z.B. immer alle 10 aufeinanderfolgenden Fälle zu einer Klasse zusammenfasst!
Da die Original-Variable durch eine Sortierung nicht in ihrer Reihenfolge verändert werden darf, wäre hier die Möglichkeit eine neue Variable einzuführen, die die fortlaufende Fallzahl darstellt. Dies kann man ja ganz einfach über $CASENUM machen.
Nun müsste man aber eine Funktion kennen, die bsp. immer alle 10 aufeinanderfolgenden Werte der $CASENUM-Variablen zu jeweils einer Klasse zusammenfasst (entweder durch Überschreiben der $CASENUM-Variablen oder durch Berechnung einer neuen Variablen) und jeder dieser Klasse einen fortlaufenden Wert gibt (1,2,3 usw.). Z.B. bekommen die Fälle 1-9 den Wert 1, die Fälle 10-19 den Wert 2 usw.
Nach diesen Klassen, deren Breite (hier: 10) sich aus der späteren Spaltenzahl der Matrix ergibt, könnte man wieder die Umstrukturierungsfunktion anwenden, um die gewünschte Matrix zu erhalten.
Das "letzte" Problem ist also die Klassenzuweisung durchnummerierter Fälle. Ich hab hier auch schon einen Ansatz gefunden mit der MOD-Funktion, wo man die Spaltenbreite angeben kann. Diese Rechenanweisung müsste man aber im Syntax-Editor schreiben, um jeder Klasse (mit z.B. 10 Fällen) immer einen neuen (fortlaufenden) Wert zuzuweisen.
Hier weiß ich leider nicht mehr weiter, da ich wie gesagt den Syntax von SPSS nicht beherrsche, um hier fortlaufende Klassen gleicher Breite zu berechnen! Möglicherweise funktioniert das über eine If-Bedingung bzw. Loop-Funktion?!
Ich wäre euch echt dankbar wenn ihr mir hier weiterhelfen könntet!
Viele Grüße,
Holger
bei obigem Problem bin ich etwas weitergekommen und könnte es für kleine Fallzahlen lösen! Bei größeren Fallzahlen ist dies jedoch manuell nicht durchführbar. Kann mir hier jemand weiterhelfen?
Über die Umstrukturierungsfunktion lässt sich mittels einer Hilfsvariablen eine Spalte mit unterschiedlichsten Werten in eine Matrix konvertieren. Aber bis jetzt kann ich das nur für kleine Fallzahlen machen
Dabei gibt man den Fällen, die hintereinander in einer gemeinsame Reihe bei der neuen Matrix stehen sollen, einen gleichen Wert in der Hilfsvariablen.
z.B. 3 Werte (bzw. spätere Zeilenzahl der Matrix) bei 6 Fällen
Wert Hilfsvariable
2324 1
2335 1
8953 2
5645 2
8945 3
5656 3
Die Matrix, die sich dann über die Umstrukturierungsfunktion erstellen lässt, schreibt dann alle Werte (in der unveränderten Reihenfolge), die den gleichen Wert der Hilfsvariablen haben, hintereinander in eine Reihe und beginnt in der nächste Zeile, wenn sich der Wert der Hilfsvariablen ändert bzw. sich erhöht. Das richtige Ergebnis ist also dann:
[2324 2335; 8953 5645; 8945 5656]
Genau hier liegt aber das Problem bei großen Fallzahlen (> 1000 Fälle). Händisch kann man hier nämlich nicht vorgehen um eine Hilfsvariable zu bilden, die z.B. immer alle 10 aufeinanderfolgenden Fälle zu einer Klasse zusammenfasst!
Da die Original-Variable durch eine Sortierung nicht in ihrer Reihenfolge verändert werden darf, wäre hier die Möglichkeit eine neue Variable einzuführen, die die fortlaufende Fallzahl darstellt. Dies kann man ja ganz einfach über $CASENUM machen.
Nun müsste man aber eine Funktion kennen, die bsp. immer alle 10 aufeinanderfolgenden Werte der $CASENUM-Variablen zu jeweils einer Klasse zusammenfasst (entweder durch Überschreiben der $CASENUM-Variablen oder durch Berechnung einer neuen Variablen) und jeder dieser Klasse einen fortlaufenden Wert gibt (1,2,3 usw.). Z.B. bekommen die Fälle 1-9 den Wert 1, die Fälle 10-19 den Wert 2 usw.
Nach diesen Klassen, deren Breite (hier: 10) sich aus der späteren Spaltenzahl der Matrix ergibt, könnte man wieder die Umstrukturierungsfunktion anwenden, um die gewünschte Matrix zu erhalten.
Das "letzte" Problem ist also die Klassenzuweisung durchnummerierter Fälle. Ich hab hier auch schon einen Ansatz gefunden mit der MOD-Funktion, wo man die Spaltenbreite angeben kann. Diese Rechenanweisung müsste man aber im Syntax-Editor schreiben, um jeder Klasse (mit z.B. 10 Fällen) immer einen neuen (fortlaufenden) Wert zuzuweisen.
Hier weiß ich leider nicht mehr weiter, da ich wie gesagt den Syntax von SPSS nicht beherrsche, um hier fortlaufende Klassen gleicher Breite zu berechnen! Möglicherweise funktioniert das über eine If-Bedingung bzw. Loop-Funktion?!
Ich wäre euch echt dankbar wenn ihr mir hier weiterhelfen könntet!
Viele Grüße,
Holger



