Welche Reportingprocedur?
Verfasst von Waldemar am 28 Oktober, 2009 - 14:28
Hallo Zusammen,
Ich suche nach einer Lösung. Zwischenzeitlich habe ich es über ein SAS-Datastep gelöst, wo die Anzahlen generiert werden, aber ich bin mir fast sicher, dass es auch mit Proc Tabulate, Report oder einer anderen geht.
gegeben ist ein Dataset mit 4 Attributen: Kundennummer und bis zu je 3 Reisevorschläge pro Kunde.
proc format library=work;
value ziel
1 = 'Berlin'
2 = 'London'
3 = 'Paris'
4 = 'Prag'
5 = 'Rom'
;
run;
data work.vorschlag;
input
kunde
vorschlag1
vorschlag2
vorschlag3
;
format vorschlag1-vorschlag3 ziel.;
datalines;
1 1 0 0
2 5 3 1
3 2 5 0
4 4 0 0
5 5 0 0
6 3 4 5
7 5 0 0
8 3 1 0
9 5 0 0
10 4 5 1
11 2 0 0
12 5 2 0
13 2 4 5
14 1 2 3
15 1 3 5
16 3 5 1
17 2 3 4
18 4 3 0
19 1 5 0
20 5 0 0
;
run;
value ziel
1 = 'Berlin'
2 = 'London'
3 = 'Paris'
4 = 'Prag'
5 = 'Rom'
;
run;
data work.vorschlag;
input
kunde
vorschlag1
vorschlag2
vorschlag3
;
format vorschlag1-vorschlag3 ziel.;
datalines;
1 1 0 0
2 5 3 1
3 2 5 0
4 4 0 0
5 5 0 0
6 3 4 5
7 5 0 0
8 3 1 0
9 5 0 0
10 4 5 1
11 2 0 0
12 5 2 0
13 2 4 5
14 1 2 3
15 1 3 5
16 3 5 1
17 2 3 4
18 4 3 0
19 1 5 0
20 5 0 0
;
run;
Benötigt wird eine Ausgabe in dieser Form:
| V1 | V2 | V3
--------+----+----+----
Berlin | 4 | 1 | 3
London | 4 | 2 | 0
Paris | 3 | 4 | 1
Prag | 3 | 2 | 1
Rom | 6 | 4 | 3
hat vielleicht jemand eine Idee? Alles was ich probiert habe, hat bis jetzt nicht so funktioniert wie ich es wollte.
Viele Grüße
Waldemar
»
- Anmelden oder Registrieren um Kommentare zu schreiben

Vielen Dank!
so wie es aussieht, geht es ohne einen Zwieschenschritt (Datastep oder Proc Transpose) nicht. Deswegen mache ich es so wie Muschik vorgeschlagen hat.
data vv (keep=zeile wert);
set vorschlag;
format wert ziel.;
%do i = 1 %to 3;
if vorschlag&i then do;
zeile = "Zeile &i";
wert = vorschlag&i;
output;
end;
%end;
run;
%mend ds;
%ds;
Proc tabulate data=vv;
class wert zeile ;
table
wert=' ' all='Summe',
(zeile=' ' all='Gesamt')*n=' ' /
ROW=FLOAT
Box='Reisevorschlag'
PRINTMISS MISSTEXT='0'
;
run;
Nochmal Vielen Dank an Euch!
Viele Grüße
Waldemar
Proc transpose und Proc tabulate
Hallo Waldemar,
zuerst sollte man die drei Variablen in eine Spalte zusammenfassen und danach kann man sie in einer Kreuztabelle mit z. B. Proc Tabulate ausgeben.
DATA = Vorschlag (RENAME = (Vorschlag1 - Vorschlag3 = V1 - V3))
OUT = Vorschlag1 (WHERE = (Col1 NE 0))
;
BY Kunde;
VAR V1-V3;
RUN;
PROC TABULATE DATA=Vorschlag1 FORMAT=BEST6.;
CLASS _NAME_ /ORDER = UNFORMATTED ;
CLASS Col1 /ORDER = FORMATTED PRELOADFMT ;
TABLE
Col1 = "",
_Name_ = "Anzahl Vorschläge" * N = ""
/BOX="Ziele" PRINTMISS
;
RUN;
Schöne Grüße
Jan
data vv; set vorschlag(rename
data vv;
set vorschlag(rename =(vorschlag1=vorschlagg) In=A1)
vorschlag(rename =(vorschlag2=vorschlagg) In=A2)
vorschlag(rename =(vorschlag3=vorschlagg) In=A3);
if A1 then vorschlag="V1";
if A2 then vorschlag="V2";
if A3 then vorschlag="V3";
run;
Proc freq data=vv (where=(vorschlagg ne 0)) ;
table vorschlagg*vorschlag/nocol nocum nopercent norow;
run;