【问题标题】:Resolving ampersand in proc http SAS解决 proc http SAS 中的 & 符号
【发布时间】:2016-10-27 21:17:52
【问题描述】:

我在宏函数中有这个简单的 PROC HTTP 过程。

我希望 &trainname 和 &date 不被解析。但是 &datum 和 &treinnumer 必须解决。

我尝试使用 %nrstr 和 %str 宏函数,但没有任何效果。

 %macro treinnummers(treinnummer,datum);
        filename uit "/home/myfolder/sasuser.v94/test.html";    
        proc http url="http://www.belgianrail.be/jpm/sncb-nmbs-routeplanner/trainsearch.exe/nox?ld=abcde%nrstr(&trainname)=&treinnummer.%nrstr(&date)=&datum."out=uit; 
        run; 
 %mend;

【问题讨论】:

    标签: sas


    【解决方案1】:

    有很多方法!我发现一种可靠的方法是使用数据步骤创建您的 URL,然后通过 %superq() 调用如下:

    %macro treinnummers(treinnummer,datum);
      filename uit "/home/myfolder/sasuser.v94/test.html"; 
      data _null_;
        format html $2048.;
        html=cats("http://www.belgianrail.be"
          ,"/jpm/sncb-nmbs-routeplanner/trainsearch.exe/nox?"
          ,'ld=abcde'
          ,'&trainname=',"&treinnummer"
          ,'&date=',"&datum");
        call symputx('html',html,'l');
      run;
      proc http url="%superq(html)" out=uit; run;
    %mend;
    

    请注意,上面的“技巧”是将宏变量放在单引号中以防止解析。更多解释见here..

    【讨论】:

    • 感谢您的回答。仍然收到相同的错误消息:
    • 警告:未解析明显的符号引用 TRAINNAME。警告:明显的符号引用 DATE 未解析。
    • 您能否更新您的问题以准确显示您在日志中的哪个位置收到该消息?开启options mprint; 会有所帮助..
    【解决方案2】:

    我找到了解决问题的方法:

    data _NULL_;
            format html $2048.;
            html=cats("http://www.belgianrail.be"
              ,"/jpm/sncb-nmbs-routeplanner/trainsearch.exe/nox?"
              ,'ld=abcde'
              ,'&trainname=',"&treinnummer"
              ,'&date=',"&datum");
    
            call symputx('html',html,'G');
    run;
    
    proc http url=%NRSTR("&html.") out=uit; run;
    

    【讨论】:

    • 是的,我在使用 proc http 时也遇到了奇怪的宏解析问题,因此使用了%superq()(取自我的一些工作代码)。很高兴你明白了..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 2018-07-22
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多