Welche Reportingprocedur?

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;

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

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.

%macro ds;
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.

PROC TRANSPOSE
  
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;