Я новичок в SAS и, возможно, наивно пытаюсь имитировать построение макросов как функции в SAS.
У меня есть несколько макропеременных, которые инициируются из хранимого процесса. Некоторые могут иметь значения, а другие могут быть пустыми.
%let a1 = column_name1;
%let a2 = column_name2;
%let a3 = ;
%let col1 = &a1;
%let col2 = &a2;
%let col3 = &a3;
Я хочу использовать их в proc sql как:
proc sql;
create table some_table as
select
&col1 AS column1,
&col2 AS column2,
&col3 AS column3
from some_table;
quit;
Однако, это не будет работать для переменных, которые пусты (&col3
). Поэтому я пытаюсь создать какую-то функцию, которая будет оберткой вокруг нее. Что-то вроде:
%macro macro_return_string(macro_variable);
%if length(macro_variable) = 1 %then %do; /* if column_name# is not empty, then it len() is always >2 */
"";
%end;
%else %do;
macro_variable;
%end;
%mend macro_return_string;
Так что будет использоваться как:
%let col1 = macro_return_string(&a1); /* return column_name1 */
%let col2 = macro_return_string(&a2); /* return column_name2 */
%let col3 = macro_return_string(&a3); /* return "" */
Спасибо за помощь!
Аналогичный вопрос был задан здесь , но я не могу решить свою проблему из него.