Learning SAS? Welcome to the exclusive online community for all SAS learners.

Create serially numbered macro variables

Posts: 1

Create serially numbered macro variables


during my data step i would like to create macro variables (named "macro_variable_X") every time the column A of a row contains the value "mv". These macro variables should be serially numbered (X stands for the number).

(1) At the moment i have a problem concatenating the string "macro_variable_" and the number "X":


  call symput (cat('m_column_', 'x'), someValue);

=> Does not create a macro variable called: "m_column_1" as it is supposed to.

(2) The next question is, how to increment my counter variable x.

I tried to define the counter variable before the datastep like this:

%LET x=0;

and increment it in my do loop like this:

if (A="mv") then do;

    call symput ('x', symget('x')+1);

    call symput (cat('m_column_', symget('x')), someValue);


=> throws this ERROR: Symbolic variable name M_COLUMN_ 1 must contain only letters, digits, and underscores.

I would be grateful for any help :smileyconfused:

Super User
Super User
Posts: 6,502

Re: Create serially numbered macro variables

CATS() will strip the spaces before concatenation.

Also use CALL SYMPUTX to strip the spaces from the value being stored into the macro variable.

You might also want to use CATX('_',...) instead of CATS() to have it insert the underscore for you.

Super User
Posts: 17,868

Re: Create serially numbered macro variables

Why use a macro variable for X?

Increment X every time the A='mv' is true:

data _null_;

set have;

retain x 0;

if (A="mv") then do;


    call symputx(cat('m_column_',put(x, 3. -l)), someValue);



Ask a Question
Discussion stats
  • 2 replies
  • 3 in conversation