Community deutschsprachiger SAS-Anwender und -Programmierer

Antworten
Dies ist eine offene Gruppe. Melden Sie sich an und klicken Sie auf die Schaltfläche „Gruppe beitreten“, um Mitglied zu werden und damit zu beginnen, Beiträge in dieser Gruppe zu veröffentlichen.
Highlighted
Contributor
Beiträge: 42
erster Wert

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.

Frequent Contributor
Beiträge: 125
Betreff: erster Wert

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

 

Occasional Contributor
Beiträge: 9
Betreff: erster Wert

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;