SAS-如果是DDE中的then宏

SAS-如果是DDE中的then宏,sas,sas-macro,Sas,Sas Macro,我通过DDE将三个数据集输出到Excel(set1、set2、set3)。数据集具有相同的变量,除了set3有两个附加变量。我已经将DDE部分包装在一个宏中,我为每个数据集调用该宏,并使用“put”写出我想要的变量。我想知道如果在set3上调用宏,如何从set3添加两个附加变量。以下是我目前的代码: filename out dde 'excel|sheet1!r2c2:r1000c5'; %macro write(set); data _null_; set &s

我通过DDE将三个数据集输出到Excel(
set1、set2、set3
)。数据集具有相同的变量,除了
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
%结束
帮助您更清楚地了解哪些语句是宏语句,哪些是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;

PUT
语句没有结尾分号,只用于
%if
%else
语句

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

您甚至可以添加一些冗余宏
%do
%结束
帮助您更清楚地了解哪些语句是宏语句,哪些是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;

虽然它是宏程序,但是如果-then在数据步骤中,使用%if-%then语句是错误的。虽然它是宏程序,但是如果-then在数据步骤中,使用%if-%then语句是错误的。啊,我明白了。我认为
%else
语句后面的分号将输出一个分号,从而结束
%if
语句。谢谢请记住,一旦宏处理器完成,宏代码就消失了,生成的任何文本都会传递到SAS,就像您自己在程序文件中键入的一样。啊,我明白了。我认为
%else
语句后面的分号将输出一个分号,从而结束
%if
语句。谢谢请记住,一旦宏处理器完成,宏代码就会消失,生成的任何文本都会传递到SAS,就像您自己将其键入程序文件一样。