检查 SAS 代码中变量是否存在
Checking the existence of a variable in SAS code
我不确定周六晚上是否会得到任何答复,但我会大声疾呼:)
我正在尝试自动化 SAS 代码,该代码在 2-3 家公司之间进行变量比较。在每一个任务中,我可能会与不同的公司合作,所以我想我只能手动输入公司名称。
我描述了每个公司的宏观变量,例如:
%let C1=CompanyNo1; %let C2=CompanyNo2; %let C3=CompanyNo3;
然后我只把 &C1
放在剩下的代码中。如果我以后换别的公司,那我只改代码里的CompanyNo1
不过,问题是我可能需要稍后做不同数量的公司之间的比较。如果我写了4家公司的代码,如果我需要在接下来运行做2家公司之间的比较,那么我必须停用部分代码。
所以我想在代码中写一个存在性检查,例如;
data _null_;
if &C3 is true then continue the run;
else if quit the code.
run;
有人告诉我,我可以用 %Macro
声明来做到这一点(他说也许,他不确定)。但我不确定如何使用 %Macro
.
实现此目的
提前感谢您的贡献...
您可以使用 %SYMEXIST
宏函数和 SYMEXIST
数据步函数检查代码中是否存在宏变量。
终于找到了有效的解决办法。
%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
,不做其他数据处理。它完成了没有错误消息的过程。
我不确定周六晚上是否会得到任何答复,但我会大声疾呼:)
我正在尝试自动化 SAS 代码,该代码在 2-3 家公司之间进行变量比较。在每一个任务中,我可能会与不同的公司合作,所以我想我只能手动输入公司名称。
我描述了每个公司的宏观变量,例如:
%let C1=CompanyNo1; %let C2=CompanyNo2; %let C3=CompanyNo3;
然后我只把 &C1
放在剩下的代码中。如果我以后换别的公司,那我只改代码里的CompanyNo1
不过,问题是我可能需要稍后做不同数量的公司之间的比较。如果我写了4家公司的代码,如果我需要在接下来运行做2家公司之间的比较,那么我必须停用部分代码。
所以我想在代码中写一个存在性检查,例如;
data _null_;
if &C3 is true then continue the run;
else if quit the code.
run;
有人告诉我,我可以用 %Macro
声明来做到这一点(他说也许,他不确定)。但我不确定如何使用 %Macro
.
提前感谢您的贡献...
您可以使用 %SYMEXIST
宏函数和 SYMEXIST
数据步函数检查代码中是否存在宏变量。
终于找到了有效的解决办法。
%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
,不做其他数据处理。它完成了没有错误消息的过程。