LesezeichenAbonnierenRSS-Feed abonnieren
MichaelSch
Calcite | Level 5

Hallo zusammen,

 

ich brauche wieder mal eure Hilfe. Ich habe schon viele Foren und auch Google durchsucht und bin leider zu keinem zufriedenstellenden Ergebnis gekommen.

 

Aus einer Tabelle schreibe ich per "put" Daten ins Log, welches ich vorher als externe .txt-Datei festlegte.

Anschließend lese ich diese .txt-Datei ein und gebe sie als PDF-Datei aus.

 

Das Problem ist nun, dass ich den Text "Das SAS System" welcher oben im Log steht nicht wegbekomme. Manche Foren weisen darauf hin, dass man den Title leeren soll, dies führte allerdings nicht zum gewünschten Ergebnis.

 

Aktuell nutze ich den Umweg und habe die Pagesize auf den maximal möglichen Wert gestellt, was mir allerdings sehr unprofessionell erscheint, es funktioniert aber 🙂

 

Auch habe ich es schon durch das setzen folgender Optionen versucht:

options nosource nonotes nodate errors=0

 

1.) Habt ihr vielleicht eine Lösungsmöglichkeit, wie ich diesen Text einfach wegbekomme?

2.) Gibt es eine einfachere Möglichkeit, die Daten als PDF auszugeben (Wichtig hierbei ist allerdings auch, dass ich Erklärungstexte, für jeden Wert eine Überschrift usw. hinzufügen kann. Dies ist im Log sehr einfach durch das @ möglich. Allerdings kann ich dadurch keinen Seitenumbruch einfügen. Bsp. siehe folgend)

 

/* 03_Geschlechter */
        if "&Filt_Geschlechter" = 1 then do; /* Filter 03_Geschlechter */
            put @4 ">> Geschlecht" @125 "Handlungsbedarf: " HandlBed_Geschl_Empty;
            put                 @20 "| Anzahl Datensätze"   @40 '| %-Anteil an Gesamt';
            put @8 53*'_'       @20 "|"                     @40 "|";
            put @8 "Männlich"   @20 "| " Geschl_Maennlich   @40 "| " Geschl_Maennlich_Anteil commax6.2 ' %';
            put @8 "Weiblich"   @20 "| " Geschl_Weiblich    @40 "| " Geschl_Weiblich_Anteil commax6.2 ' %';
            put @8 "diverse"    @20 "| " Geschl_Divers      @40 "| " Geschl_Divers_Anteil commax6.2 ' %';
            put @8 "Leerfelder" @20 "| " Geschl_Empty       @40 "| " Geschl_Empty_Anteil commax6.2 ' %';
            put;
        end; /* Ende Filter Geschlechter */

 

Vielen Dank für eure Hilfe im Voraus

 

Michael

2 ANTWORTEN 2
Kurt_Bremser
Super User

Wieso muss das im Log sein? Kann man das nicht überhaupt gleich mit ODS in ein pdf ausgeben? Und das Log anschließend aufbereiten (Überschriftszeilen zB mit grep entfernen) und dazuhängen, falls es interessiert?

GrischaPfister
Fluorite | Level 6

Hallo Michael,

 

warum der Umweg über das LOG? mit File "path/name.txt" im Data Step kannst Du die Ausgabe von Put doch direkt in eine TXT-Datei lenken - wenn Du bei dem "alten" Data Step Reporting bleiben willst. Einen gesteuerten Seiltenumbruch bekommst Du da übrigens mit Put _page_; hin.

 

Im Rahmen des ODS kannst Du aber auch direkt PDF erzeugen und für komplexere Anforderungen an das Layout gibt es mittlerweile ein ODS-Objekt im Datastep, das hier größtmögliche Freiheiten bietet.

 

Weiter unten ein Beispiel, dass ein paar der Möglichkeiten aufzeigt, hoffe das hilft weiter

 

Viele Grüße,

 

Grischa

 

Ods _all_ close;

title;
footnote;
Options nonumber nodate;

Ods Pdf file="d:/temp/test.pdf" startpage=off;

Data _null_;
  Set sashelp.class end=eof;
  Length curVar $32;
  By notsorted name;
  varnames= "age height weight";
  If ( _n_ = 1 ) Then Do;
    Dcl odsout ods ( NAME: "myReport", Label: "my report");
  End;
  ods.table_start(style_attr:"width=10cm");
    ods.row_start();
      ods.format_cell(text:catx(" ","Schüler/in:",name,cats("(",sex,")")),column_span: 2);
    ods.row_end();

    ods.row_start();
      ods.format_cell(text:"",column_span: 2,inline_attr:"cellheight=0.3cm");
    ods.row_end();

    Do i=1 To countw(varnames);
      curVar = scan(varnames,i);
      ods.row_start();
      ods.format_cell(text:curVar);
      ods.format_cell(text:vvaluex(curVar));
      ods.row_end();
    End;
  ods.table_end();
  If ( eof ) Then ods.delete();
Run;

Ods _all_ close;