вернуть значение TRUE, если столбец существует в таблице SAS - PullRequest
0 голосов
/ 05 декабря 2018

Я не могу понять, как вернуть значение 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;

1 Ответ

0 голосов
/ 05 декабря 2018

Если вы хотите создать макрос в стиле «функция», он не может генерировать ЛЮБОЙ фактический код 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

...