Frage zum Befehl AGGREGATE

Alles rund um SPSS Syntax und Programmierung.

Frage zum Befehl AGGREGATE

Beitragvon miner » Do 25. Mai 2017, 23:50

Hi,

ich möchte in SPSS die Summe spaltenweise bilden (in Excel würde man das mit SUMME() machen).

Mittlerweile bin ich so weit gekommen:

Code: Alles auswählen
AGGREGATE
/outfile OVERWRITE = YES
/Soll_grand_sum = sum(Soll).
list vars Soll_grand_sum.


Dieser Codeschnipsel berechnet die Spaltensumme von SOLL, legt eine neue Variable an (Soll_GRAND_SUM), und trägt in diese neue Variable in jede Zeile den Wert der Spaltensumme ein. list vars gibt mir dann diesen Wert im Output aus (und zwar den Wert jeder Zeile, d.h. x-mal den gleichen Wert).

Das ist schön und gut, ich bekomme damit die Spaltensumme korrekt berechnet und ausgegeben (habe es in Excel nachgerechnet). Es ist aber nicht sehr elegant. Die Variable Soll_GRAND_SUM kann ich im Datensatz eigentlich nicht gebrauchen, und der Output wird viel zu lang, da x-mal der gleiche Wert ausgegeben wird.

Gibt es nicht eine einfachere/elegantere Lösung?

Besten Dank für jeden Hinweis und Grüße!

Grüße
Miner
miner
 
Beiträge: 86
Registriert: Do 12. Sep 2013, 16:54
Danke gegeben: 6
Danke bekommen: 0 mal in 0 Post

Re: Frage zum Befehl AGGREGATE

Beitragvon ponderstibbons » Fr 26. Mai 2017, 12:30

Unter eine Spalte die Summe dieser Spalte zu setzen widerspricht an sich der Logik des Aufbaus von SPSS-Dateien. Aber wenn es unbedingt sein muss, kannst Du bei n Fällen im Datensatz erstmal von Hand einen Fall n+1 bilden und dann mit LAG arbeiten

IF($casenum = 1) sum_var = ausgangs_var.
EXECUTE .
IF($casenum > 1) sum_var = SUM(ausgangs_var,LAG(sum_var)) .
EXECUTE .

Mit freundlichen Grüßen

PonderStibbons
ponderstibbons
 
Beiträge: 2523
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 2
Danke bekommen: 257 mal in 256 Posts

Re: Frage zum Befehl AGGREGATE

Beitragvon miner » Fr 26. Mai 2017, 16:10

Hi ponnderstibbons,

besten Dank für Deine Antwort.

ponderstibbons hat geschrieben:Unter eine Spalte die Summe dieser Spalte zu setzen widerspricht an sich der Logik des Aufbaus von SPSS-Dateien.


Es muss wohl Szenarien geben, in denen man nicht umhin kommt, den Datensatz so zu strukturieren (sonst würde es keinen Sinn machen, dass es die Funktion AGGREGATE gibt).

Im vorliegenden Datensatz sind zeilenweise Buchungen abgetragen und spaltenweise Attribute dieser Buchungen (Betragshöhe, Datum, Verwendungszweck usw.). Wenn ich den Datensatz so strukturieren würde, dass er der Logik von SPSS entspricht, d.h., dass ich die Summe die ich will durch spaltenweises aufsummieren von Variablen erhalten, müsste der Datensatz so aufgebaut sein:

-eine Zeile (die Untersuchungseinheit wäre dann nicht mehr Buchung sondern "Konto"
-alle anderen Informationen (s.o.) spaltenweise abgetragen.

Ich hätte also einen Datensatz mit einer Zeile und mit hunderten von Spalten. Damit lässt sich nicht gut arbeiten. Bei der Dateneingabe nicht und bei der Analyse auch nicht.h

Falls Du jedoch noch eine andere Idee hinsichtlich der Struktur des Datensatz hast, wäre ich aufrichtig interessiert.



ponderstibbons hat geschrieben:Aber wenn es unbedingt sein muss, kannst Du bei n Fällen im Datensatz erstmal von Hand einen Fall n+1 bilden und dann mit LAG arbeiten
Code: Alles auswählen
IF($casenum = 1) sum_var = ausgangs_var.
EXECUTE .
IF($casenum > 1) sum_var = SUM(ausgangs_var,LAG(sum_var)) .
EXECUTE .


Besten Dank für den Codeschnipsel.

Ich habe ihn soweit ausprobiert. Wie bei meiner Lösung habe ich eine neue Variable im Datensatz, jedoch stehen nicht in allen Zellen die Gesamtsumme, sondern jeweils die kummulierte Summe für die vorangegangenen Fälle. Ich habe also wie bei meiner ursprünglichen Lösung eine weitere Variable im Datensatz und die Ausgabe im Output wäre ähnlich unübersichtlich. Ich sehe auf den ersten Blick keinen Vorteil ggü. meiner ursprünglichen Lösung.

Dennoch bedanke ich mich für den LAG-Befehl, den kannte ich noch nicht. Sicher werde ich ihn hie und da gebrauchen können.
miner
 
Beiträge: 86
Registriert: Do 12. Sep 2013, 16:54
Danke gegeben: 6
Danke bekommen: 0 mal in 0 Post

Re: Frage zum Befehl AGGREGATE

Beitragvon miner » Fr 26. Mai 2017, 16:24

Mittlerweile habe ich ein halbwegs brauchbares work-around gefunden. Was mir dabei geholfen hat ist, dass ich mittlerweile herausgefunden habe, dass AGGREGATE auch über die GUI zugänglich ist (wusste ich noch gar nicht), dass machte es mir einfacher, einen passenden Syntaxschnipsel zu erstellen.

Eine weitere Anforderung hab ich in meinem Ausgangspost noch nicht genannt, in meiner jetzigen Lösung ist sie jedoch bereits integriert: Die Ausgabe der Summen soll nach Monaten getrennt erfolgen.


Code: Alles auswählen
AGGREGATE
  /OUTFILE=* MODE=ADDVARIABLES
  /BREAK=Monat_Jahr
  /Soll_sum=SUM(Soll).


Der oben stehende Codeschnipsel legt im Datensatz eine neue Variable Soll_sum an und trägt in jede Zelle die Summe für den entsprechenden Monat (Gruppenvariable ist Monat_Jahr) ein. D.h. innerhalb eines Monats (Monat_Jahr) steht in der neuen Variablen Soll_sum in jeder Zeile der gleiche Wert (eben die "Montssumme" von der Quellvariablen soll für den jeweiligen Monat). Zwischen den Monaten unterscheiden sich die Summen jedoch (da nicht in jedem Monat exakt die gleiche Ausgabe d.h. Soll-Buchungen im Datensatz bestehen.

Jetzt muss ich mir das nur noch in übersichtlicher Form ausgeben lassen. Das macht der folgende Codeschnipsel:

Code: Alles auswählen
SORT CASES  BY Monat_Jahr.
SPLIT FILE LAYERED BY Monat_Jahr.
FREQUENCIES VARIABLES=Soll_sum
  /ORDER=ANALYSIS.
split file off.


Der o.s. Codeschnipsel gibt eine einheitliche Tabelle mit nur wenigen überflüssigen Informationen aus:

Zeilenweise sind die Monate abgetragen und in einer Spalte die "Sollsumme" pro Monat. Die Spalte mit den Häufigkeiten wird nicht unbedingt benötigt, anderseits geben diese Häufigkeiten die Anzahl der durchgeführten Soll-Buchungen pro Monat an. Das kann eine nützliche Zusatzinfo sein.
Die drei weiteren Spalten mit diversen Prozenten (Prozente, gültige Prozente, kumulierte Prozente) sind überflüssig, jedoch unschädlich.
miner
 
Beiträge: 86
Registriert: Do 12. Sep 2013, 16:54
Danke gegeben: 6
Danke bekommen: 0 mal in 0 Post


Zurück zu SPSS Syntax

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste

cron