Stream SAS程序流:奇怪的换行符

Stream SAS程序流:奇怪的换行符,stream,sas,proc,Stream,Sas,Proc,服务器:Unix,客户端:IE Edge 我的部分代码: %let P_debug_log = %str(<INPUT TYPE='hidden' NAME='_DEBUG' VALUE='LOG'>); proc stream outfile=_webout quoting=both resetdelim='_do' ASIS; BEGIN %if "&_whattodo" ne "print" %then %do; <script language='J

服务器:Unix,客户端:IE Edge 我的部分代码:

%let P_debug_log = %str(<INPUT TYPE='hidden' NAME='_DEBUG' VALUE='LOG'>);
proc stream outfile=_webout quoting=both resetdelim='_do' ASIS;
BEGIN
  %if "&_whattodo" ne "print" %then %do;
    <script language='JavaScript' type='text/javascript'>                                       
        function subForm(f,v) {
            if (v !== '') {
              $('#'+ f).append('<INPUT TYPE="hidden" NAME="'+ v +'" VALUE="1">');
            }
            $('#'+f).submit();       
          } 
      $(document).ready(function() {                                                            
        $('#footButtons').append($('.footButton'));   /* move all elements with class=footButton to pageFooter */
        $('#footMessage').append($('.footMsg'));   
        $('form.log').append("&P_debug_log.");
      });                                                                               
    </script>
  %end;
;;;;
%let P_debug_log=%str();
proc stream outfile=_weboutquoting=两个resetdelim=''u do'ASIS;
开始
%如果“&_whattodo”ne”打印“%n”,则%do;
函数子窗体(f,v){
如果(v!=''){
$('#'+f).append('');
}
$('#'+f).submit();
} 
$(文档).ready(函数(){
$('#footButton')。追加($('.footButton'));/*将class=footButton的所有元素移动到pageFooter*/
$('#footMessage')。追加($('.footMsg');
$('form.log')。追加(“&P_调试_日志”);
});                                                                               
%结束;
;;;;
输出: 问题是,生成的流输出在“某处”有换行符,但在预期的位置没有换行符(使用选项ASIS,它的格式应该与我的代码中的格式相同)。 这会导致不可预测的JavaScript错误,例如,当换行符位于JavaScript字符串中时。 似乎有一个隐式的lrecl1024。如果换行符按预期设置,则可以。 有什么提示吗

这是原始格式的输出(页面源):

函数子窗体(f,v){if(v!=''){$('#'+f).append('')}$('#'+f).submit()}
$(文档).ready(函数(){$('.'footButton')).append($('.footButton'));$('.'footMessage').append($('.footMsg'));$('form.log').append(“
");       });                         

我不确定是否有答案,但宏引用似乎是导致PROC STREAM将宏变量分隔为多行的原因。 因此,如果我运行这个简化的示例:

%let P_debug_log = %str(<INPUT TYPE='hidden' NAME='_DEBUG' VALUE='LOG'>);
filename tst temp;
proc stream outfile=tst quoting=both resetdelim='_do' ASIS;
BEGIN
$('form.log').append("&P_debug_log.");
;;;;
如果删除
quoting=both
选项,则换行符将位于引号之外,无论是否使用宏引号

$('form.log').append(
"<INPUT TYPE='hidden' NAME='_DEBUG' VALUE='LOG'>"
);
$('form.log')。追加(
""
);

只需删除添加到
proc stream
ASIS
选项即可

我不确定这是否是一个未记录的特性,但它没有出现在文档中,所以我假设是这样

一旦你移除,奇怪的线断就会消失


四处搜索,ASIS选项似乎与试图保持列对齐有关。

首先,感谢大家的回答。 罗伯特·彭里奇是对的。 解决方案: 如果您使用PROC-STREAM并希望包含静态代码(如我的示例:Javascript),那么请使用&STREAMDELIM-READFILE而不是%include。 原因:如果包含的代码中有(有效!)内联注释“/”(注释到下一个换行符为止),将导致不可预测的结果。。。。 谢谢,
dbdb看起来像ASIS/PRESCOL选项中的一个bug。您可能想向SAS提出这个问题。谢谢。我发现了,但我想你是对的。删除ASIS选项会产生一个换行符为1024字节的流。
$('form.log').append("
<INPUT TYPE='hidden
' NAME='_DEBUG
' VALUE='LOG
'>");
$('form.log').append("
<INPUT TYPE='hidden' NAME='_DEBUG' VALUE='LOG'>
");
$('form.log').append(
"<INPUT TYPE='hidden' NAME='_DEBUG' VALUE='LOG'>"
);