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

proc format;
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)

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 prli in start umbenannt. Das ist der Name in der durch CNTLOUT erzeugten Datei.

proc format cntlout = ausgabe;
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.

proc tabulate data=testdaten; /* HIER fehlen drei Daten-Zeilen */
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