LesezeichenAbonnierenRSS-Feed abonnieren
Fay123
Obsidian | Level 7

Hallo!

 

Ich habe eine Tabelle, wo ich einerseits Felder summieren möchte, allerdings von einem Feld immer den ersten Wert übernehmen möchte.

Z.B.

Kunde    Preis   Limit

xyz         5          100

xyz         6          100

 

Resultat:

xyz       11         100

 

Gibt es eine Formel, die ich für den "ersten Wert" anwenden kann?

 

Wie immer vielen Dank für die Hilfe.

2 ANTWORTEN 2
mfab
Quartz | Level 8

Hallo Fay,

 

da gibt es mehrere Möglichkeiten...

eine wäre z.B. einfach mit einem SQL:

select
  kunde,
  sum(preis),
  limit
from xyz
group by kunde, limit;

Beste Grüße

Michael

 

CKothenschulte
Obsidian | Level 7

Hallo @Fay123,

 

in dem Beispiel ist der SQL vermutlich die beste und schlankste Lösung.

Ich würde trotzdem noch gerne auf due Befehle BY und RETAIN im Data-Step hinweisen.

Mein Beispiel ist zwar deutlich länger als der SQL, bietet aber die Möglichkeit Einfluss zu nehmen, wenn zum Beispiel unterschiedliche Limits je Kunde vorkommen, der Kunde im Ergebnis aber nur einmal auftauchen soll.

data DATEN;
	input KUNDE $3. PREIS 2. LIMIT 3.;
	cards;
xyz 5 100
xyz 6 100
abc 3 110
abc 4 110
;
run;

proc sort data=DATEN;
	by KUNDE;
run;

data ERGEBNIS (drop=LIMIT PREIS);
	set DATEN;
	by KUNDE;
/* Ergebnisvariablen über einen Satz hinweg speichern */
retain LIMIT_ERG;
retain PREIS_ERG;

/* Neuer Kunde */
if first.KUNDE then do;
	LIMIT_ERG = LIMIT;
	PREIS_ERG = 0;
end;

/* Preis summieren */
PREIS_ERG = sum(PREIS_ERG, PREIS);

/* Letzter Satz des Kunden, also Ausgabe */
if last.KUNDE then output;
run;