/*Three common methods to define user-defined macro variable*/
/*1:the simple approach is to use %let statment*/
/*2:the another one to use call sypmput or call symputx statment in data step*/
/*3:the last one is to use pro sql*/
/*call symputx can strip both leading and trailing blanks while call symput does not trim leading and trailing blanks.*/
/*we can use separated by '' or trimmed to remove blanks.*/
data a;
x=2;
y=3;
z=x+y;
call symput("z1",z);
call symputx("z2",z);
run;
%put #&z1.#;
%put #&z2.#;
proc sql noprint;
select x into : x1 from a;
select x into : x2 separated by ' ' from a;
select x into : x3 trimmed from a;
quit;
%put |&x1|;
%put |&x2|;
%put |&x3|;
/*宏会将所有值包含数字在内当做文本值,不能直接计算宏变量,需要使用%eval或者%sysevalf来计算。*/
/*%eval:计算整数值*/
/*%sysevalf:计算浮点数*/
%let a=12;
%let b=11;
%let c=12.3;
%put %eval(&a+&b);
%put %sysevalf(&a+&c);