LesezeichenAbonnierenRSS-Feed abonnieren
Christine2
Fluorite | Level 6

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

5 ANTWORTEN 5
Kurt_Bremser
Super User

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.

Christine2
Fluorite | Level 6

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

Kurt_Bremser
Super User

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.

Christine2
Fluorite | Level 6

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.

JMS
Obsidian | Level 7 JMS
Obsidian | Level 7

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

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

 

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
  • 5 Antworten
  • 2350 Aufrufe
  • 0 Kudos
  • 3 in Unterhaltung