## Rename columns and array operation using a loop

Solved
Frequent Contributor
Posts: 82

# Rename columns and array operation using a loop

``````/* data have */
Class Time_0 Time_1 Time_2
A      1     2      4
B      0     3      9
C      3     6      0

/* data want */
Class _01 _12
A    2    2
B    1    3
C    2    0``````

Rule 1: In data 'want', column '_01' = column 'Time_1' / 'Time_0' from data 'have'.

'_12' = 'Time_2' / 'Time_1'.

....

Rule 2: If divisor = 0 then result = 1.

Because my actual data have more than 100 'time' columns: Time_0-Time_&Num  (Num is a global macro variable), would prefer using a loop rather than hardcode it.

Thanks.

Accepted Solutions
Solution
‎03-15-2017 12:41 AM
Super User
Posts: 6,903

## Re: Rename columns and array operation using a loop

The naming of the new columns might be a little different here.  The name is based on the numerator (but not the denominator):

data want;

set have;

array times {0:&num} time_0 - time_&num;

array ratios {&num} _001 - _&num;

do i=1 to &num;

if times{i-1} = 0 then ratios{i)=0;

else ratios{i} = times{i} / times{i-1};

end;

drop i;

run;

If you would like, you can also drop all the TIME variables as well.

All Replies
Solution
‎03-15-2017 12:41 AM
Super User
Posts: 6,903

## Re: Rename columns and array operation using a loop

The naming of the new columns might be a little different here.  The name is based on the numerator (but not the denominator):

data want;

set have;

array times {0:&num} time_0 - time_&num;

array ratios {&num} _001 - _&num;

do i=1 to &num;

if times{i-1} = 0 then ratios{i)=0;

else ratios{i} = times{i} / times{i-1};

end;

drop i;

run;

If you would like, you can also drop all the TIME variables as well.

Super User
Posts: 9,802

## Re: Rename columns and array operation using a loop

You are mixing up usage here.  Columns names are for identification in the programming, they are not meant to be used as data.

☑ This topic is solved.