Calcite | Level 5

## 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

1 ACCEPTED SOLUTION

Accepted Solutions
Amethyst | Level 16

## Re: Creating New Variables in a Do Loop

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
5 REPLIES 5
Amethyst | Level 16

## Re: Creating New Variables in a Do Loop

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

## 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.

Calcite | Level 5

## 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

## 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;

Calcite | Level 5

## 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

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