2015-06-20 170 views
-1

我不知道如果我在星期六晚上的任何答案,但我会给留言:)检查在SAS代码中的变量的存在

我想的Automize一个SAS-代码做比较在2-3家公司之间进行变异。在每项任务中,我可能会与不同的公司合作,所以我想我只能手动输入公司名称。

我描述了宏观变量对每个公司,例如:

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

,然后我只能把&C1在剩余的代码。如果我不晚于另一家公司工作,那么我只更改代码中的CompanyNo1。

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

所以我想写一个存在于代码中的检查;

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

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

感谢提前任何贡献......

+0

看看[这个问题](http://stackoverflow.com/questions/9009944/is-there-a-way-to-make-sas-stop-upon-the-first-warning-or-错误/ 9217932#9217932) - 它与您的不太一样,但提供的解决方案可以很容易地进行调整。 – user667489

+0

感谢您的链接。现在我没有我的原始代码和SAS程序,但它可能会有所帮助。该链接打开了另一个问题: 是否有可能在%macro中实现该功能,以避免收到任何错误消息?例如,我像往常一样为前两家公司编写“数据运行语句”,但我在第三家公司(&C3)的%Macro检查中编写了“数据运行”语句,如: %macro check_for_errors; %data table3; %process =&C3 bla bla bla process ...; %运行; %if&syserr> 0%then%do;endsas; %end; %修复check_for_errors; – user3714330

+0

你的问题含糊不清,不知道你在做什么,或者你如何比较,很难提出替代方案。您可以轻松编写循环来处理宏变量,直到遇到缺失的值。 – Reeza

回答

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,它不做其他数据处理。它最终确定了没有错误信息的过程。

1

可以与%SYMEXIST微距功能和SYMEXIST数据阶跃函数代码检查宏观变量的存在。