Hi liebe SPSS Profis,
ich benutze seit einer Woche SPSS (bzw. PASW) 17 um meine Examensarbeit auszuwerten. Ich greife auf Daten einer größeren Internationalen Studie zurück und habe dementsprechend viele variable, von denen ich nicht alle brauche, einige zu neuen Variablen zusammenfassen möchte, etc. .
In die Syntax habe ich mich ein bischen eingearbeitet und wie man mit RECODE und COMPUTE mein Problem grundsätzlich lösen kann ist mir bewusst. Aber:
Ich möchte 1. nicht so viel Zeit mit dem schreiben der Umwandlungsbefehle verbringen und 2. kann es gut sein, dass ich noch neue Variable dazu nehme oder manche einer anderen Kategorie zuordenen möchte. Dafür möchte ich möglichst kurzen und übersichtlichen Quellcode.
Ich hatte daran gedacht, den Variablen weitere Attribute wie "Mathematische Kompetenz" oder "didaktische Kompetenz" zuzuordnen. Es gibt sogar die Möglichkeit über den Befehl "ATTRIBUTES". Ich habe aber keine Möglichkeit gefunden, die Attribute einer Variablen sinnvoll abzufragen, und so mit einer Schleife die neue Variable möglichst Code-sparend und übersichtlich zu berechnen.
Die zweite Möglichkeit, die mir eingefallen ist, wäre die Speicherung der Variablen jeweils in einem Vektor zu jeder Kategorie. Das Problem dabei ist, dass man offenbar Vektoren nur zu aufeinander folgenden Variablen erstellen kann (mit 'VEKTOR Kategorie1= Varx TO Vary') und meine Variablen nicht in der richtigen Reihenfolge sind.
Für Hilfe wäre ich sehr dankbar. Insbesondere auch für die Auskunft, dass das einfach nicht geht bzw. mit den Methoden, die mir eingefallen sind nicht geht.
Herzlichen Gruß und Dank im vorraus
Nikolai
Variablen zu Kategorien/Variablengruppen zuordnen
-
- Beiträge: 3
- Registriert: 09.12.2009, 23:37
-
- Beiträge: 114
- Registriert: 30.03.2009, 09:39
Hallo Nikolai,
grundsätzlich hört sich Dein Lösungsansatz mit dem VECTOR durchaus vielversprechend an. Aufgrund der von Dir beschriebenen Schwäche des VECTOR-Befehls, nur Variablen zu verarbeiten, die in einer kontinuierlichen Reihenfolge in der Datei auftreten, nutze ich ihn nur sporadisch.
Flexibler, wenn auch etwas komplizierter in der Handhabung, ist man mit Makros unterwegs. Ein Beispielmakro wäre z.B. folgendes:
Dieses Beispielmakro multipliziert die Werte der Variablen v1 und v3 jeweils mit dem Wert 1000. Zwischen den Befehlen !DEFINE und !ENDDEFINE wird das Makro definiert; mit der Zeile "!makro1 v1 v3." wird das Makro schließlich aufgerufen. Bei diesem Makroaufruf werden die Variablen v1 und v3 an den Parameter "!POSITIONAL !CMDEND" des Makros übergeben. Das Makro selber besteht aus einer Schleife (!DO), die über die Ausprägungen des ersten Parameters des Makroaufrufs (angesprochen mit !1) läuft, der in diesem Beispiel zugleich der einzige Parameter ist. Diese Ausprägungen des Parameters !1 sind wie gesagt die beiden übergebenen Variablen v1 und v3. Danach folgen die Kalkulationen (im Beispiel die Multiplikation mit 1000). !DOEND beendet die Schleife.
Hört sich wahrscheinlich anfangs erstmal ziemlich kompliziert an. Ist es sicher auch, aber ein sehr hilfreiches Dokument wird mit SPSS schon mitgeliefert (ich denke mal, in Version 17 ist es auch dabei): Die "Command Syntax Reference". In meiner Version kann man dieses pdf einfach über das Menü "Hilfe" aufrufen. Dort gibt es auch ein ausführliches Kapitel zu "DEFINE-!ENDDEFINE".
So, jetzt muss ich aber anfangen zu arbeiten
.
Viele Grüße,
georggraph
grundsätzlich hört sich Dein Lösungsansatz mit dem VECTOR durchaus vielversprechend an. Aufgrund der von Dir beschriebenen Schwäche des VECTOR-Befehls, nur Variablen zu verarbeiten, die in einer kontinuierlichen Reihenfolge in der Datei auftreten, nutze ich ihn nur sporadisch.
Flexibler, wenn auch etwas komplizierter in der Handhabung, ist man mit Makros unterwegs. Ein Beispielmakro wäre z.B. folgendes:
Code: Alles auswählen
DEFINE !makro1 (!POSITIONAL !CMDEND).
!DO !i !IN (!1).
COMPUTE !i = !i * 1000.
EXE.
!DOEND.
!ENDDEFINE.
!makro1 v1 v3.
Hört sich wahrscheinlich anfangs erstmal ziemlich kompliziert an. Ist es sicher auch, aber ein sehr hilfreiches Dokument wird mit SPSS schon mitgeliefert (ich denke mal, in Version 17 ist es auch dabei): Die "Command Syntax Reference". In meiner Version kann man dieses pdf einfach über das Menü "Hilfe" aufrufen. Dort gibt es auch ein ausführliches Kapitel zu "DEFINE-!ENDDEFINE".
So, jetzt muss ich aber anfangen zu arbeiten

Viele Grüße,
georggraph
"Ein kaum merkliches Kopfnicken verriet dann, dass er nicht die Absicht habe, diese Frage zu beantworten, und es war Sache des Fragestellers, seinen eigenen Fehler zu erkennen und die Frage neu zu formulieren." (F.Kafka: Der Verschollene)
-
- Beiträge: 3
- Registriert: 09.12.2009, 23:37
-
- Beiträge: 114
- Registriert: 30.03.2009, 09:39
Hallo Nik,
Zugegebenermaßen sind Makros für Einsteiger in die Syntaxsprache nicht einfach zu verstehen (ging mir anfangs auch so).
Eine einfachere, aber dennoch nützliche Funktion ist die DO REPEAT-Schleife. Schau hierzu mal in der SPSS-Hilfe nach.
Falls Du immer wieder mit den gleichen Variablen unterschiedliche Kalkulationen/Transformationen/etc. durchführen möchtest, würde sich ein (ganz simples) Variablenlistenmakro anbieten, z.B.:
Der Vorteil ist, dass Du nur einmal diese Variablenliste definieren musst und dann in allen möglichen Befehle/Schleifen/etc. Bezug auf sie nehmen kannst.
Die VarListe kannst Du sogar mit der DO REPEAT-Schleife verknüpfen, also statt...
...kannst Du stattdessen auch schreiben:
Viele Grüße,
georggraph
Zugegebenermaßen sind Makros für Einsteiger in die Syntaxsprache nicht einfach zu verstehen (ging mir anfangs auch so).
Eine einfachere, aber dennoch nützliche Funktion ist die DO REPEAT-Schleife. Schau hierzu mal in der SPSS-Hilfe nach.
Falls Du immer wieder mit den gleichen Variablen unterschiedliche Kalkulationen/Transformationen/etc. durchführen möchtest, würde sich ein (ganz simples) Variablenlistenmakro anbieten, z.B.:
Code: Alles auswählen
DEFINE !varlist1 () var1 var2 var7 var8 var12 !ENDDEFINE.
Die VarListe kannst Du sogar mit der DO REPEAT-Schleife verknüpfen, also statt...
Code: Alles auswählen
DO REPEAT var = var1 var2 var7 var8 var12.
Code: Alles auswählen
DO REPEAT var = !varlist1.
georggraph
"Ein kaum merkliches Kopfnicken verriet dann, dass er nicht die Absicht habe, diese Frage zu beantworten, und es war Sache des Fragestellers, seinen eigenen Fehler zu erkennen und die Frage neu zu formulieren." (F.Kafka: Der Verschollene)
-
- Beiträge: 3
- Registriert: 09.12.2009, 23:37
Nochmals vielen Dank für die Antwort. Mittlerweile habe ich das Problem mit Hilfe von Macros einigermaßen zufriedenstellend gelöst. Den Befehl
DEFINE !varlist1 () var1 var2 var7 var8 var12 !ENDDEFINE.
habe ich dafür auch ausgiebig genutzt. Das größte Problem war noch eine neue Mittelwertsfunktion (MEAN) zu Programmieren, die eine varlist wie oben Definiert bearbeiten kann (falls es dazu ne eigene Funktion schon gibt: mir bitte mitteilen).
Ansonsten bin ich aber mittlerweile gut genug versorgt. Vielen Dank nochmals.
Gruß
Nikolai
DEFINE !varlist1 () var1 var2 var7 var8 var12 !ENDDEFINE.
habe ich dafür auch ausgiebig genutzt. Das größte Problem war noch eine neue Mittelwertsfunktion (MEAN) zu Programmieren, die eine varlist wie oben Definiert bearbeiten kann (falls es dazu ne eigene Funktion schon gibt: mir bitte mitteilen).
Ansonsten bin ich aber mittlerweile gut genug versorgt. Vielen Dank nochmals.
Gruß
Nikolai