LesezeichenAbonnierenRSS-Feed abonnieren
Anika
Calcite | Level 5

Guten Morgen zusammen,

 

wir möchten ein Balken-Linen-Diagramm erstellen und haben eine Tabelle mit den Feldern Ident, Berichtswoche (alphanumerisch), Numerisches Feld 1, Numerisches Feld 2.

Für jede Kalenderwoche ist das erste numerische Feld gefüllt. Beim zweiten numerischen Feld gibt es missing values.

Wenn wir jetzt ein Balken-Liniendiagramm erstellen und die Berichtswoche auf die x-Achse stellen, das erste numerische Feld als Liniendiagramm angezeigt bekommen möchten und das zweite numerische Feld als Balkendiagramm, dann ignoriert die Prozedur die Balken die nur missing values haben.

Ich habe jetzt den Workaround vorgeschlagen, mit einer berechneten Spalte (when numFeld2 IS MISSING then 0 else numFeld2), aber das ist ja nicht so elegant.

Habt ihr noch weitere Vorschläge? Kann ich eine Option einstellen (Problem: Berichtswoche ist kein Datumsformat)?

 

Gruß

Anika Jura

6 ANTWORTEN 6
basefan
Obsidian | Level 7

Hallo Anika,

Forum einen Beitrag mit dem Titel "Nicht gefüllte Zellen mit Proc Freq ausgeben".

Darin waren drei Lösungen skizziert, die sich aber auf den proc freq bzw. den proc tabulate beziehen. Aber die Lösung lässt sich ggf auf Deine Prozedur übertragen.

Die Redscope-Beiträge wurden alle nach CoDe SAS übernommen, rechts unten ist der Link ins Archiv, siehe "Redscope Archive". Dort auch Direkter Zugriff auf alle Beiträge aus den Jahren 2005 - 2014.

Viel Erfolg beim Suchen, vielleicht hilft es: Die Lösungen sind vom 17. August 2011 und vom 22. August 2011, beide von Jan Heuer.

 

Gruß Hans

basefan
Obsidian | Level 7

Hallo,

... Beitrag von damals gefunden:

Nicht gefüllte Zellen mit Proc Freq ausgeben

 

Gruß Hans

GrischaPfister
Fluorite | Level 6

Hallo Anika,

 

ich nehme an, ihr verwendet Proc Gbarline?

 

Dann kann im BAR Statement mithilfe der Option midpoints = ... angegeben werden für welche Werte Balken erzeugt werden sollen, die werden dann auch angezeigt, wenn es nur missing values gibt.

Hier ein Beispiel mit Daten aus der Online-Hilfe zu Proc Gbarline:

Für 06AUG07 habe ich missing values für die Variablen CLOSE und VOLUME eingesetzt, VOLUME steuert die Höhe der Balken, CLOSE wird als Linie angezeigt und auf der X-Achse werden die Tage angezeigt.

Der erste Aufruf von Proc Gbarline zeigt, dass für 06AUG07 kein Balken erzeugt wird, da für Balken und Linie keine Werte vorhanden sind.

Beim zweiten Aufruf werden die anzuzeigenden X-Achsen Abschnitte über die MIDPOINT-Anweisung explizit benannt, in dem Fall wird der Wert auf der X-Achse angezeigt, auch wenn keine Daten vorhanden sind.

Im dritten Beispiel lese ich die Werte für die MIDPOINTS dann per SQL in eine Makrovariable, um den Code flexibel zu gestalten.

Goptions reset=all border;
Title1 "NYSE Closing Price and Volume - 2002";

Data nyse;
   Format Day date7.;
   Format High Low Close comma12.;
   Format Volume comma12.;
   Input Day date7. High Low Close Volume;

Datalines;
01AUG07 10478.76 10346.24 10426.91 1908809
02AUG07 11042.92 10298.44 10274.65 1807543
05AUG07 10498.22 10400.31 10456.43 1500656
06AUG07 10694.47 10636.32 . .
07AUG07 10801.12 10695.13 10759.48 1695602
;
Run;

Proc Gbarline data=nyse ;
  * GP Aufruf ohne midpoints, der Balken fuer 06aug07 fehlt *;
  Bar day / discrete sumvar=volume space=4;
  Plot / sumvar=close ;
Run;

Proc Gbarline data=nyse ;
  * GP Aufruf mit midpoints, 06aug07 wird auf der Achse angezeigt *;
  Bar day / discrete sumvar=volume space=4 
    midpoints = "01aug07"d "02aug07"d "05aug07"d "06aug07"d "07aug07"d
  ;
  Plot / sumvar=close ;
Run;

* GP Liste der anzuzeigenden Midpoints direkt aus Tabelle lesen *;
Proc Sql noprint;
  Select put(day,best.) Into :daysList Separated By " "
    From nyse
  ;
Quit;

%Put &=daysList;

Proc Gbarline data=nyse ;
  Bar day / discrete sumvar=volume space=4 
    midpoints = &daysList;
  Plot / sumvar=close ;
Run;
Quit;

Hoffe, dass hilft weiter 😉

 

Viele Grüße,

 

Grischa

Anika
Calcite | Level 5

Hallo zusammen,

 

danke erst einmal für die Antworten.

Grisha: Das ist schon eine sehr große Hilfe gewesen. Die Berichtswochen kann ich mir jetzt alle anzeigen lassen und das Balkendiagramm ist auch richtig. Leider ignoriert PROC GBARLINE sehr erfolgreich die Einträge in der Tabelle für das Liniendiagramm, sprich, dort werden auch "fehlende" Werte angezeigt. Kann ich da noch was machen oder muss ich die Tabelle erst vorverdichten.

Die Tabelle ist aber auch eher so:

Woche     NumLin  NumBar

Woche1   3             .

Woche1   5             .

Woche2   2             17

Woche2   5              .

Woche3   4              .

Woche3   2              .

usw.

d.h. jede Woche kann mehrfach auftauchen, die Spalte für das Liniendiagramm ist immer gefüllt, die Spalte für das Balkendiagramm nur sporadisch.

In deinem Beispiel geht es, wenn ich zum Beispiel die folgenden Datalines nutze:

Datalines;

01AUG07 10478.76 10346.24 10426.91 1908809

01AUG07 10478.76 10346.24 10000.91 .

02AUG07 11042.92 10298.44 . .

02AUG07 11042.92 10298.44 . .

05AUG07 10498.22 10400.31 10456.43 1500656

05AUG07 10498.22 10400.31 10000.43 1500000

06AUG07 10694.47 10636.32 10300.12 .

06AUG07 10694.47 10636.32 10000.12 .

07AUG07 10801.12 10695.13 10759.48 1695602

07AUG07 10801.12 10695.13 10000.48 1695000

;

Run;

 

Gruß

Anika

BrunoMueller
SAS Super FREQ

Hallo Anika

 

Hier ein Beispiel mit SGPLOT, mit deinen Daten.

 

data have;
  infile cards;
  input
    Woche : $8.
    NumLin : 8.
    NumBar : 8.
  ;
cards;
Woche1 3 .
Woche1 5 .
Woche2 2 17
Woche2 5 .
Woche3 4 .
Woche3 2 .
Woche4 . .
;

proc sgplot data=have;
  vbar woche / response=NumBar;
  vline Woche / response=NumLin markers;
run;

Bruno

Anika
Calcite | Level 5

Damit funktioniert die Abfrage.

Danke schön!

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
  • 2011 Aufrufe
  • 0 Kudos
  • 4 in Unterhaltung