SAS - 在DDE中的If-then宏

时间:2018-01-25 20:32:38

标签: sas sas-macro

我通过DDE(set1, set2, set3)向Excel输出三个数据集。数据集具有相同的变量,但set3有两个附加变量。我将DDE部分包装在一个宏中,我调用每个数据集并使用“put”来写出我想要的变量。我正试图弄清楚如果在set3上调用宏,如何从set3添加另外两个变量。到目前为止,这是我的代码:

filename out dde
    'excel|sheet1!r2c2:r1000c5';

%macro write(set);
  data _null_;
    set &set.;
    file out dlm='09'x;
    put
      var1
      var2
      var3
      %if &set. = set3 %then var4 var5;
        %else ;
  run;
%mend write;
%write(set1);
%write(set2);
%write(set3);

如果我删除宏%if-%then语句,代码工作正常。任何想法如何去做?谢谢!

1 个答案:

答案 0 :(得分:2)

PUT语句没有结尾分号,仅适用于%if%else语句。

如果我独立于SAS代码缩进宏代码,我发现它有助于使代码更清晰。此外,当SAS语句需要多行时,请确保将终端分号放在单独的行上。

您甚至可以添加一些冗余的宏%do;%end;,以帮助更清楚地说明哪些语句是宏语句,哪些语句是SAS语句。或者在这种情况下是SAS声明的一部分。

%macro write(set);
  data _null_;
    set &set.;
    file out dlm='09'x;
    put var1 var2 var3
%if &set. = set3 %then %do;
        var4 var5
%end;
    ;
  run;
%mend write;