Community deutschsprachiger SAS-Anwender und -Programmierer

Antworten
Dies ist eine offene Gruppe. Melden Sie sich an und klicken Sie auf die Schaltfläche „Gruppe beitreten“, um Mitglied zu werden und damit zu beginnen, Beiträge in dieser Gruppe zu veröffentlichen.
Highlighted
Occasional Contributor
Beiträge: 5
Vermeiden von willkürlichen Umbrüchen in der Ausgabe

Hallo allerseits,

nachdem mir hier bereits einmal so schnell geholfen wurde, dachte ich, ich trage mein aktuelles Problem auch mal in die Breite.

 

Ich verwende SAS 9.3 M3 und entwickle im SasEnterprise Guide.

 

Folgendes Problem:

Ich baue einen recht langen Text zusammen, den ich für die Lesbarkeit an bestimmten Stellen umbreche. Soweit funktioniert der Code auch schon wie ich will. Allerdings haut mir SAS nach 256 Zeichen noch einen Zeilenumbruch rein den ich so gar nicht gebrauchen kann.

In folgendem Code habe ich das Problem auf den Kern reduziert.

filename gibsaus "G:\Temp\_Christine\nachvollziehen.sas";

data _null_;
    file gibsaus;
    set sashelp.eis end= eof;


    length labeldef $10000;

    retain labeldef;

    if _N_ = 1 then do;
        labeldef = 'label ';
    end;

    labeldef = trim(labeldef) !! " '" !! trim(descript) !! "'" !! '0A'x;

    if eof then do;
        put labeldef;
    end;
run;

Der Sinn der Ausgabe sei erst einmal dahingestellt. Da der Fehler hier schon so auftritt habe ich das Programm nicht mehr geschönt.

Die ersten Zeilen in dem Ausgabefile sehen toll aus, aber dann kommt der unerwünschte Umbruch

Umbruch.JPG

Kann ich diesen Umbruch irgendwie unterbinden? Am Ende möchte ich ausführbaren Code haben und leider stört sich SAS an diesen willkürlichen Umbrüchen.

 

Vielen Dank für die Hilfe

 

Christine Böhme

Super User
Beiträge: 10.280
Betreff: Vermeiden von willkürlichen Umbrüchen in der Ausgabe
Posted in reply to Christine2

2 Möglichkeiten:

1. Die Gute

data _null_;
file gibsaus;
if _N_ = 1 then put 'label';
labeldef = "'" !! trim(descript) !! "'";
put @2 labeldef;
if eof then put ';';
end;
run;

2. Die Schlechte:

filename gibsaus "G:\Temp\_Christine\nachvollziehen.sas" lrecl=10000;

Die Erste ist nämlich systemunabhängig und verwendet automatisch die richtige Kennung fürs Zeilenende.

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
How to convert datasets to data steps
How to post code
Occasional Contributor
Beiträge: 5
Betreff: Vermeiden von willkürlichen Umbrüchen in der Ausgabe
Posted in reply to KurtBremser

Hallo,

 

erst einmal vielen Dank für die schnelle Antwort.

Funktioniert die erste Antwort auch so, wenn ich mehrere Variablen ausgeben will?

 

Die Endausgabe soll ein lesbares SAS-Programm sein, sprich

length ...;

label ....;

format ...;

input ...;

 

Ich könnte die 4 Teile immer so untereinander schreiben, allerdings ist das Programm dann für einen Menschen nicht mehr nachvollziehbar.

Die weniger schöne Lösung werde ich ausprobieren.

 

Vielen Dank

 

Christine

Super User
Beiträge: 10.280
Betreff: Vermeiden von willkürlichen Umbrüchen in der Ausgabe
Posted in reply to Christine2

Um ein schön lesbares Programm zu erzeugen, würde ich da so machen:

data _null_;
file '......';
length zeile $80;
put 'label';
do until (eof);
  set .... end=eof;
  zeile = '  "' !! trim(descript) !! '"';
  put zeile;
end;
put ';';
put 'length';
do until (eof);
  set ..... end=eof;

usw.

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
How to convert datasets to data steps
How to post code
Occasional Contributor
Beiträge: 5
Betreff: Vermeiden von willkürlichen Umbrüchen in der Ausgabe
Posted in reply to KurtBremser

Ich glaub ich muss meinen Code umarbeiten.

 

Das schaut sehr gut aus und hat den Vorteil, dass der programmerzeugende Code auch noch lesbarer ist als das was ich fabriziere.

Es lohnt doch immer mal wieder die Sichtweise von jemand anderen zu sehen.

 

Vielen Dank dafür.

Occasional Contributor JMS
Occasional Contributor
Beiträge: 8
Betreff: Vermeiden von willkürlichen Umbrüchen in der Ausgabe
Posted in reply to Christine2

Die Standard-Ausgabelänge ist auf 256 eingestellt, deshalb der Umbruch.

Um längerer Zeilen auszugeben nimmt man die LS= oder LRECL= Option.