如何引用文件_webout而不是put语句的html文件?

时间:2017-10-25 18:04:28

标签: sas sas-stored-process

所以我看到各种页面通知SAS Stored Process用户创建存储过程网页如何执行以下操作:

https://support.sas.com/documentation/cdl/en/stpug/62758/HTML/default/viewer.htm#p0q383asmm4bejn1i7z4q7iv5eke.htm

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}}

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,如果我理解您的话,您应该得到您所希望的内容。