proc tabulate, fehlende Zeilen ausgeben (aus Format bekannt)
Hallo zusammen,
gibt es eine Möglichkeit, alle per Format vorgegebenen Ausprägungen einer Variable im Proc Tabulate auszugeben, auch wenn noch kein Datensatz zu einzelnen Befüllungen vorliegt ?
Bsp: Festlegung eines Formates für alle Preislisten eines Jahres zu Jahresbeginn (im Beispiel: 6 Preislisten), gewünscht ist der gleiche Tabellenaufbau egal ob es schon Werte zu den zuukünftigen Preislisten gibt oder nicht.
Bisher habe ich Dummy-Datensätze erzeugt. Das führt zum gewünschten Ergebnis, geht es auch eleganter?
Beispiel
value $PRLIfmt
"OT01" = "Office Today 1/2010"
"OT02" = "Office Today 2/2010"
"OT03" = "Office Today 3/2010"
"S01" = "Shop 1/2010"
"S02" = "Shop 2/2010"
"S03" = "Shop 3/2010"
;
run;
title2 "Bsp-Daten im Februar";
data testdaten(label="Bsp-Daten im Februar");
format prli $PRLIfmt.;
prli="OT01"; ae=1000; output;
prli="OT02"; ae=2000; output;
prli="S01"; ae=1100; output;
run;
proc tabulate data=testdaten; /* HIER fehlen drei Daten-Zeilen */
class prli;
var ae;
tables prli, ae*sum;
run;
title2 "Bsp-Daten im August";
data testdaten(label="Bsp-Daten im August");
format prli $PRLIfmt.;
prli="OT01"; ae=1000; output;
prli="OT02"; ae=2000; output;
prli="OT03"; ae=3000; output;
prli="S01"; ae=1100; output;
prli="S02"; ae=2200; output;
prli="S03"; ae=3300; output;
run;
proc tabulate data=testdaten; /* HIER sind die Daten-Zeilen vollständig (6 Zeilen) */
class prli;
var ae;
tables prli, ae*sum;
run;
Gruß
Hans Kneilmann, Schäfer Shop GmbH (SSI)
- Anmelden oder Registrieren um Kommentare zu schreiben

CNTLOUT in PROC FORMAT
Hallo,
wenn Du CNTLOUT in PROC FORMAT verwendest, dann wird ein Ausgabedatensatz erzeugt, der alle Formatausprägungen beinhaltet. Ich hab das mal auf Dein Beispiel angewendet und dabei die Variable
prliinstartumbenannt. Das ist der Name in der durch CNTLOUT erzeugten Datei.value $PRLIfmt
"OT01" = "Office Today 1/2010"
"OT02" = "Office Today 2/2010"
"OT03" = "Office Today 3/2010"
"S01" = "Shop 1/2010"
"S02" = "Shop 2/2010"
"S03" = "Shop 3/2010"
;
run;
title2 "Bsp-Daten im Februar";
data testdaten(label="Bsp-Daten im Februar");
format start $PRLIfmt.;
start="OT01"; ae=1000; output;
start="OT02"; ae=2000; output;
start="S01"; ae=1100; output;
run;
data testdaten;
merge ausgabe (where = (fmtname = 'PRLIFMT') in = in) testdaten;
by start;
if in;
keep ae start label;
run;
proc tabulate data=testdaten; /* HIER fehlen drei Daten-Zeilen */
class start;
var ae;
tables start, ae*sum;
run;
CNTLOUT in PROC FORMAT
Hallo Dubravko,
danke für diese Lösung. Sie ist schöner als die bisher von uns genutzte, aber nicht wirklich toll.
Gruß Hans
Option Preloadfmt
Hallo Hans,
dies kannst Du über die Option Preloadfmt im class-Statement erreichen. Du musst gleichzeitig im table-Statement die Option printmiss angeben, damit auch die leeren Zeilen ausgegeben werden.
class prli /preloadfmt;
format prli $prlifmt.;
var ae;
tables prli, ae*sum /printmiss;
run;
Schöne Grüße
Jan
Danke
Hallo Jan,
danke!
Das ist die Lösung.
Einfach zwei klitzekleine Änderungen und schon sind alle fehlenden Zeilen da.
Genau auf so eine Lösung habe ich gehofft. Super!
Gruß Hans