如果SAS表中存在列,则返回TRUE值



当表中存在列时,我不太清楚如何返回TRUE值(注意-TRUE值可以是我可以在下游评估为TRUE的任何值(

示例-修改星号之间的代码

%macro column_exists(data=, target=);
%local check;
%let data_lib = %sysfunc(upcase(%sysfunc(scan("&data", 1, "."))));
%let data_data = %sysfunc(upcase(%sysfunc(scan("&data", 2, "."))));
%put &data_lib;
%put &data_data;
proc sql noprint;
select name into :check separated by " "
from    dictionary.columns
where   libname = "&data_lib" and 
memname = "&data_data" and
upcase(name) = upcase("&target");
quit;
* RETURN LOGICAL/NUMERIC/CHAR VALUE *
%mend column_exists;
data _null_;
%let test = %column_exists(data=sashelp.cars, target=mpg_city);
if &test eq TRUE then %put 'ok'; else %put 'no';
run;

如果您想创建一个"函数"风格的宏,它无法生成任何实际的SAS代码。它只能包含宏语句。

您可以使用%sysfunc((宏函数来调用宏代码中的SAS函数,如OPEN((和VARNUM((。

%macro varexist(ds,var);
%local dsid ;
%let dsid = %sysfunc(open(&ds));
%if (&dsid) %then %sysfunc(varnum(&dsid,&var));
%else 0 ;
%let dsid = %sysfunc(close(&dsid));
%mend varexist;

请参阅此链接以获取包含注释和其他功能的完整宏定义。https://github.com/sasutils/macros/blob/master/varexist.sas

最新更新