LesezeichenAbonnierenRSS-Feed abonnieren
Sven4IBM
Fluorite | Level 6

Ich habe Tabellen erstellt, die eine Spalte mit Text (Inhalte als html) enthalten und ein weiteres Statement, welches den Rahmen der kompletten html Datei erzeugt.

 

data TAG;
       Tag = "<TABLE cellpadding='2' cellspacing='1' border='0' bgcolor='gainsboro'><TR><TH>TEST</TH></TR></TABLE>";
run;

ODS LISTING CLOSE;
data _null_;
  file "Tag.htm";

  put "<html>";
  put "<head>";
  put "	<meta content='-1' http-equiv='Expires'/>";
  put "	<meta content='no-cache' http-equiv='Pragma'/>";
  put "	<meta content='no-cache' http-equiv='Cache-Control'/>";
  put "	<meta content='text/html; charset=ISO-8859-1' http-equiv='content-type'/>";
  put "	<style media='all' type='text/css'>";
  put "		TH {font-size:15px;font-family:Arial, Helvetica, Geneva, Swiss, SunSans-Regular;vertical-align:top;white-space:nowrap;font-weight:heavy;text-align:LEFT;}";
  put "	</style>";
  put "</head>";
  put "<body bgcolor='#FFFFFF' text='#CCCCCC' leftmargin='0' topmargin='0' marginwidth='0' marginheight='0' style='background-color: #FFFFFF;margin-left:15;margin-top:10px;'>";

  /*****/
  /* hier soll das TAG rein */
  /*****/

  put "</body>";
  put "</html>";
run;
ODS LISTING;

Weie bekomme ich nun den Inhalt der Spalte Tag aus der Tabelle TAG in den html code integriert ?

2 ANTWORTEN 2
Kurt_Bremser
Super User

Ist ganz einfach. Man nutzt die end= option im set statement und _N_ für die erste Iteration des data step:

data _null_;
file "Tag.htm";
set tag end=eof;
if _n_ = 1 then do;
  put "<html>";
  put "<head>";
  put "	<meta content='-1' http-equiv='Expires'/>";
  put "	<meta content='no-cache' http-equiv='Pragma'/>";
  put "	<meta content='no-cache' http-equiv='Cache-Control'/>";
  put "	<meta content='text/html; charset=ISO-8859-1' http-equiv='content-type'/>";
  put "	<style media='all' type='text/css'>";
  put "		TH {font-size:15px;font-family:Arial, Helvetica, Geneva, Swiss, SunSans-Regular;vertical-align:top;white-space:nowrap;font-weight:heavy;text-align:LEFT;}";
  put "	</style>";
  put "</head>";
  put "<body bgcolor='#FFFFFF' text='#CCCCCC' leftmargin='0' topmargin='0' marginwidth='0' marginheight='0' style='background-color: #FFFFFF;margin-left:15;margin-top:10px;'>";
end;
put tag;
if eof then do;
  put "</body>";
  put "</html>";
end;
run;
GrischaPfister
Fluorite | Level 6

Hallo Sven,

 

wie Kurt völlig richtig schreibt, ist die übliche (schnelle) Lösung, ein Data Step mit der entsprechenden Verzweigung bei _N_=1 und eof = 1. Du kannst das auch mit Hilfe von Makros, die dann im Data Step verwendet werden, modular aufbauen. Da die Makros VOR der Verarbeitung des Data Steps aufgelöst werden, wird der Code in der richtigen Reihenfolge erzeugt. Beispiel:

 


%Macro Tag;
  Put "<TABLE cellpadding='2' cellspacing='1' border='0' bgcolor='gainsboro'><TR><TH>TEST</TH></TR></TABLE>";
%Mend;

%Macro HtmlStart;
  put "<html>";
  put "<head>";
  put "	<meta content='-1' http-equiv='Expires'/>";
  put "	<meta content='no-cache' http-equiv='Pragma'/>";
  put "	<meta content='no-cache' http-equiv='Cache-Control'/>";
  put "	<meta content='text/html; charset=ISO-8859-1' http-equiv='content-type'/>";
  put "	<style media='all' type='text/css'>";
  put "		TH {font-size:15px;font-family:Arial, Helvetica, Geneva, Swiss, SunSans-Regular;vertical-align:top;white-space:nowrap;font-weight:heavy;text-align:LEFT;}";
  put "	</style>";
  put "</head>";
  put "<body bgcolor='#FFFFFF' text='#CCCCCC' leftmargin='0' topmargin='0' marginwidth='0' marginheight='0' style='background-color: #FFFFFF;margin-left:15;margin-top:10px;'>";
%Mend;

%Macro HtmlEnd;
  put "</body>";
  put "</html>";
%Mend;

ODS LISTING CLOSE;
data _null_;
  file "Tag.htm";
  %HtmlStart
  %Tag
  %HtmlEnd
run;
ODS LISTING;

 

%HtmlStart erzeugt die Startsequenz der HTML-Datei mit Header und Style-Angaben, %HTmlEnd erzeugt die abschließenden Tags und %Tag den eigentlichen Inhalt.

 

Eine weitere Möglichkeit ist, die Aufgabe in drei Data Steps aufzuteilen, hierfür wird beim ersten Data Step die Datei mit "File xxx;" neu erzeugt (bzw. überschrieben). Die folgenden Data Steps verwenden dann "File xxx MOD;" (für modifiy), dann wird an die Datei angehängt. Das sieht dann so aus:

 



ODS LISTING CLOSE;
Filename out "d:/temp/tag.html";

data _null_;
  file Out;

  put "<html>";
  put "<head>";
  put "	<meta content='-1' http-equiv='Expires'/>";
  put "	<meta content='no-cache' http-equiv='Pragma'/>";
  put "	<meta content='no-cache' http-equiv='Cache-Control'/>";
  put "	<meta content='text/html; charset=ISO-8859-1' http-equiv='content-type'/>";
  put "	<style media='all' type='text/css'>";
  put "		TH {font-size:15px;font-family:Arial, Helvetica, Geneva, Swiss, SunSans-Regular;vertical-align:top;white-space:nowrap;font-weight:heavy;text-align:LEFT;}";
  put "	</style>";
  put "</head>";
  put "<body bgcolor='#FFFFFF' text='#CCCCCC' leftmargin='0' topmargin='0' marginwidth='0' marginheight='0' style='background-color: #FFFFFF;margin-left:15;margin-top:10px;'>";
Run;

data _null_;
  File out mod;
  Put "<TABLE cellpadding='2' cellspacing='1' border='0' bgcolor='gainsboro'><TR><TH>TEST</TH></TR></TABLE>";
run;

Data _Null_;
  File out mod;
  put "</body>";
  put "</html>";
run;
ODS LISTING;

Auch das kann natürlich in Makros gekapselt und wiederverwendet werden...

 

Für eine kompoexere Fragegestellung würde ich aber auf das ODS zurückgreifen und ein eigenes Style-Template verwenden um die Style-Informationen aus dem HTML rauszulösen.

 

 

Viele Grüße,

 

Grischa