所以我看到各种页面通知SAS Stored Process用户创建存储过程网页如何执行以下操作:
filename htmlfile "/sasdata/IT/APP/file.html";
proc stream outfile=_webout;
begin
&streamdelim; %include htmlfile;
;;;;
run;
put HTML语句非常好,可以快速获取HTML到页面,但是我注意到我的HTML使用put变得非常混乱且无法维护。
如何引用外部HTML文件呢?我确实有一些我在HTML put语句中引用的SAS宏,所以我不确定这些是否会在外部html中解析但仍然有兴趣看一个在存储过程中引用外部HTML文件的工作示例。
更新 - 我的示例程序
在这个放置HTML中,我只是将一个表单写入网页,其中一些数据填充在下拉列表中。我只想将其称为来自外部HTML文件的原始html,同时仍然解析嵌入在HTML中的SAS代码,如宏变量引用。
<select class="formitem styleinput" name="EQMTID">
<option value=""></option>
%macro doeqmt;
%do i = 1 %to &neqmtid;
"<option value = %bquote(")%left(%trim(&&EQMTID&i))%bquote(") >&&EQMTID&i</option>"
%end;
%mend;
%doeqmt;
</select>
更新已解决
感谢下面列出的Joe示例,这是我必须编写代码才能使其工作...在SAS代码中:
{{1}}
注意:在你的html文件中,如果你有像%DO循环这样的宏语句,你可能会收到类似“错误:%DO语句在开放代码中无效”的错误。为了解决这个错误,我在html文件中包含了一个宏包装器,如下所示:
{{1}}
答案 0 :(得分:2)
根据您的具体细节,有几种方法可以做到这一点,但最简单的两种方法是将HTML读入数据步骤(在字符变量中,每行一个),然后再将其重新输出(这如果你需要对它进行一些修改,那就更好了),或者如果你不需要修改它或者你可以在原始HTML中插入宏变量(或宏),Tom建议你可以使用PROC STREAM
预文件。
PROC STREAM非常简单。想象一下,我在c:\ temp \ helloworld.html
中有一个hello world类型文件<html>
<header>
<title>My Example Page</title>
</header>
<body>
<h1> Hello, World </h1>
</body>
</html>
然后我可以写这个简短的程序:
filename htmlfile "c:\temp\helloworld.html";
filename outfile "c:\temp\stream.html";
proc stream outfile=outfile;
begin
&streamdelim readfile htmlfile;
;;;;
run;
我现在有一个新文件stream.html
,内容相同。并且解决了任何宏变量或宏。
例如,让我们稍微改变一下:
输入:
<html>
<header>
<title>My Example Page</title>
</header>
<body>
<h1> &mystring. </h1>
</body>
</html>
输出,注意新的%let
:
filename htmlfile "c:\temp\helloworld.html";
filename outfile "c:\temp\stream.html";
%let mystring = Hello, World;
proc stream outfile=outfile;
begin
&streamdelim readfile htmlfile;
;;;;
run;
请注意,它为我们解析了宏变量。
您可以将outfile
更改为_WEBOUT
,如果我理解您的话,您应该得到您所希望的内容。