DATA Step, Macro, Functions and more

Creating New Variables in a Do Loop

Accepted Solution Solved
Reply
Occasional Contributor
Posts: 17
Accepted Solution

Creating New Variables in a Do Loop

Hi there,

I'm not sure how easy it is to do this but does anyone know how I can create new variables in a Do Loop, where the values being looped through will be part of the variable names.

So say I want to create 10 variables named a1 - a10. I was thinking I could do this in a do loop as below, but not sure how.

Note: I'm using 10 here as an example. In reality I'll swap the 10 with a macro variable.

DATA DESIGN;

  SET DESIGN;

  DO J = 1 TO 10;

     /* Here I want to create the variables a1 - a10 */

  END;

RUN;

Many thanks

Emre


Accepted Solutions
Solution
‎04-05-2014 09:12 AM
Trusted Advisor
Posts: 1,131

Re: Creating New Variables in a Do Loop

May be arrays will help you

DATA DESIGN;

  SET DESIGN;

array new(10) a1-a10;

  DO J = 1 TO 10;

      new(j)=values;

     /* Here I want to create the variables a1 - a10 */

  END;

RUN;


Thanks,

Jag

Thanks,
Jag

View solution in original post


All Replies
Solution
‎04-05-2014 09:12 AM
Trusted Advisor
Posts: 1,131

Re: Creating New Variables in a Do Loop

May be arrays will help you

DATA DESIGN;

  SET DESIGN;

array new(10) a1-a10;

  DO J = 1 TO 10;

      new(j)=values;

     /* Here I want to create the variables a1 - a10 */

  END;

RUN;


Thanks,

Jag

Thanks,
Jag
Super User
Super User
Posts: 6,502

Re: Creating New Variables in a Do Loop

You can "create" new variables by just referencing them.

%let nvars=10 ;

You could just give them a length;

  length a1 - a&nvars 8 ;

Or you could define an array ;

  array a(&nvars) ;

If you want to know how to assign them specific values then you will need to provide more information on what you want.

Occasional Contributor
Posts: 17

Re: Creating New Variables in a Do Loop

Thanks guys!

Much appreciated!

Emre

Code in the end:

DATA DESIGN;

  SET DESIGN;

  RETAIN I(0);

  I = I + 1;

  ARRAY A(&XVAR) a1 - a&XVAR;

  DO J = 1 TO &XVAR;

       IF I = J THEN A(J) = 1;

  END;

  ARRAY NUMS _NUMERIC_;

       DO OVER NUMS;

       IF NUMS= '.' THEN NUMS = 0;

  END;

RUN;

Super User
Super User
Posts: 6,502

Re: Creating New Variables in a Do Loop

Here is a way to create an identity matrix.

%let xvar=10 ;

%let base=A;

data identity&xvar ;

  array &base(&xvar) (&xvar*0) ;

  do _n_=1 to &xvar ;

    &base(_n_) = 1;

    output;

    &base(_n_) = 0;

  end;

run;

proc print; run;

Occasional Contributor
Posts: 17

Re: Creating New Variables in a Do Loop

Hi Tom,

Thanks for the tip.

I'm using PROC FCMP for the identity.

Now I need to create a diagonal from an array in PROC FCMP.

Let's see how that goes.

Thanks

Emre

☑ This topic is solved.

Need further help from the community? Please ask a new question.

Discussion stats
  • 5 replies
  • 354 views
  • 4 likes
  • 3 in conversation