LesezeichenAbonnierenRSS-Feed abonnieren
Fay123
Obsidian | Level 7

Wieder einmal das Data Integration Studio.

 

Ich habe eine Tabelle mit Bestellnummer und Kundennummer. Nun soll ich alles Bestellungen eines Kunden unter einem Schlüssel zusammenfassen, der aus den Bestellnummern besteht. Also z.B.:

 

bestellnummer 555 Kunde 111

bestellnummer 556 Kunde 111

 

herauskommen sollen dann diese beiden Datensätze jeweils mit dem Schlüssel 555_556, bei 3 Bestellungen entsprechend erweitert.

 

Ist das irgendwie machbar?

 

Vielen Dank im voraus

6 ANTWORTEN 6
CKothenschulte
Obsidian | Level 7

Hallo Fay123,

 

hier könnte eine RETAIN-Variable die Lösung sein!

 

data DATEN;
    input KUNDE BESTELLUNG;
    cards;
    111 555
    111 556
run;

proc sort data=DATEN;
    by KUNDE BESTELLUNG;
run;

data DATEN_VERDICHTET (drop=BESTELLUNG);
    set DATEN;
    by KUNDE;
    attrib BESTELLUNGEN length=$200.;
    retain BESTELLUNGEN;
    if first.KUNDE then
        BESTELLUNGEN = strip(put(BESTELLUNG,8.));
    else
        BESTELLUNGEN = strip(BESTELLUNGEN) !! "_" !! strip(put(BESTELLUNG,8.));

    if last.KUNDE then 
        output;
run;

Die Ergebnistabelle hat nun eine Zeile:

 

KUNDE BESTELLUNGEN
111 555_556

jh_ti_bw
Obsidian | Level 7

Hallo Fay123,

man kann es auch mit proc transpose machen:

data DATEN;
    input KUNDE BESTELLUNG;
    cards;
    111 555
    111 556
run;

proc sort data=DATEN;
    by KUNDE BESTELLUNG;
run;
Proc transpose data = Daten out=Daten_verdichtet prefix=Bestellung_;
  by kunde;
  var bestellung;
run;
Data Daten_verdichtet;
  Length Bestellungen $32;
  set Daten_verdichtet;
  Bestellungen = catx("_",of Bestellung_:);
  drop _: Bestellung_:;
run;

Viele Grüße

Jan

Fay123
Obsidian | Level 7

Ich bin verzweifelt ...

 

Ich arbeite im Data Integration Studio mit den Transformationen. Habe auch einen Job geschrieben der mir die Daten rausliest und sortiert. Zum Schluss bleibt mir eine Tabelle mit den Spalten Kunde und Bestellung.

Wollte jetzt mit der Transpose Transformation für jeden Kunden die Bestellungen in einer separaten Spalte anzeigen lassen, bin aber zu blöd dafür.

Kann mir jemand weiterhelfen, wo ich was eintragen muss?

Transpose2.png

 

Und wie immer vielen Dank im voraus!

Kurt_Bremser
Super User

Der Code sieht im Prinzip so aus:

data bestellungen;
input kunde $ bestellung;
cards;
a 20
b 15
c 10
d 30
;
run;

proc transpose data=bestellungen out=ergebnis;
var bestellung;
id kunde;
run;

"Bestellung" muss also ins erste Feld, und "Kunde" ins ID-Feld. Sollte das noch nicht aktiv sein, muss wahrscheinlich an den Optionen geschraubt werden. (Ich arbeite nicht mit DI Studio, ich schreibe meine Codes alle selbst)

jh_ti_bw
Obsidian | Level 7

Hallo Fay123,

Die Antwort steht bereits in meinem letzten Post.

"wählen sie sie zu transponierende Spalten aus (VAR-Anweisung)" = Bestellung.

"wählen sie Spalten aus, deren Werte Gruppen definieren (BY-Anweisung)" = Kunde

VG Jan

Fay123
Obsidian | Level 7

Vielen herzlichen Dank an alle für die Hilfe!

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

Register now!

Diskussionsstatistiken
  • 6 Antworten
  • 1766 Aufrufe
  • 0 Kudos
  • 4 in Unterhaltung