SAS - DDE 中的 If-then 宏

SAS - If-then macros in DDE

我正在通过 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 语句,代码可以正常工作。任何想法如何去做这个?谢谢!

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;