检查SAS代码中是否存在变量

时间:2015-06-20 20:53:56

标签: automation sas bigdata boolean-logic sas-macro

我不确定星期六晚上是否得到任何答案,但我会大声喊叫:)

我正在尝试自动化SAS代码,该代码在2-3家公司之间进行比较。在每项任务中,我可能会与不同的公司合作,所以我想我只能手动输入公司名称。

我描述了每家公司的宏变量,例如:

%let C1=CompanyNo1; %let C2=CompanyNo2; %let C3=CompanyNo3;

然后我只将&C1放在剩下的代码中。如果我不在以后为另一家公司工作,那么我只更改代码中的CompanyNo1。

然而,问题是我可能需要稍后对不同数量的公司进行比较。如果我为4家公司编写代码,如果我需要在下次运行中对2家公司进行比较,那么我必须停用部分代码。

所以我想在代码中编写一个existsince检查,如;

data _null_; if &C3 is true then continue the run; else if quit the code. run;

有人告诉我,我可以用%Macro声明做到这一点(他说也许,他不确定)。但我不确定如何使用%Macro实现此目的。

感谢您提前做出任何贡献......

2 个答案:

答案 0 :(得分:1)

您可以使用%SYMEXIST宏功能和SYMEXIST数据步进功能检查代码中是否存在宏变量。

答案 1 :(得分:0)

最后我找到了一个有效的解决方案。

%Macro checking;
  %let C3=CompanyNo3;
  %if &SYSERR > 0 %then %do;
     %goto exit;
  %end;

  'other data processes here';

  %exit:   /* Be careful, it is not semicolon  */
 %Mend;

因此,如果没有CompanyNo3,那么SAS只会发出警告,表示没有参加CompanyNo3。然后转到exit,它不会执行其他数据处理。它在没有错误消息的情况下完成了该过程。