Hi @sam1231
If you create a macro variable with a %let-statement, you never get leading or trailing blanks.
It only happens if you create the macro variable in a data step or proc sql. Note that you get leading blanks if the origin is a numeric variable and trailing blanks if it is a character variable.
Here is a bit of code you can try to explore the different ways of creating macro variables with or without blanks. Note the different behaviour in examples 3 and 6, where one would expect the same to happen.
/* Creation of macro variables with and without trailing blanks */
* Example 1 - Macro assignment - never with trailing blanks;
%let var1 = first ;
%let var2 = second ;
%let var3 = 5 ;
%put &var1*&var2*&var3*;
/* From existing data - first make some test data with trailing blanks */
data test;
length var1 var2 $10;
var1 = 'first';
var2 = 'second';
var3 = 5;
run;
* Example 2 - Data step - symput - blanks preserved;
data _null_; set test;
call symput('var1',var1);
call symput('var2',var2);
call symput('var3',put(var3,8.));
run;
%put &var1*&var2*&var3*;
* Example 3 - Data step - symput of trimmed/stripped variables - without blanks;
data _null_; set test;
call symput('var1',trim(var1));
call symput('var2',trim(var2));
call symput('var3',strip(put(var3,8.)));
run;
%put &var1*&var2*&var3*;
* Example 4 - Data step - symputx - without blanks;
data _null_; set test;
call symputx('var1',var1);
call symputx('var2',var2);
call symputx('var3',var3);
run;
%put &var1*&var2*&var3*;
* Example 5 - Proc sql - select variables - blanks preserved;
proc sql noprint;
select var1, var2, var3 into :var1, :var2, :var3
from test;
quit;
%put &var1*&var2*&var3*;
* Example 6 - Proc sql - Select trimmed variables - DOES NOT WORK - still with blanks;
proc sql noprint;
select trim(var1), trim(var2), strip(put(var3,8.)) into :var1, :var2, :var3
from test;
quit;
%put &var1*&var2*&var3*;
/* Removing leading/trailing blanks from existing macro variables */
* Create test variables with blanks;
data _null_; set test;
call symput('var1',var1);
call symput('var2',var2);
call symput('var3',var3);
run;
%put &var1*&var2*&var3*;
* Example 7 - Remove with macro assignment;
%let var1 = &var1;
%let var2 = &var2;
%let var3 = &var3;
%put &var1*&var2*&var3*;
* Create test variables with blanks;
data _null_; set test;
call symput('var1',var1);
call symput('var2',var2);
call symput('var3',var3);
run;
%put &var1*&var2*&var3*;
* Example 8 - Remove with %trim;
%let var1 = %trim(&var1);
%let var2 = %trim(&var2);
%let var3 = %trim(&var3);
%put &var1*&var2*&var3*;
... View more