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