turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

Find a Community

- Home
- /
- BI
- /
- Enterprise Guide
- /
- Rename columns and array operation using a loop

Topic Options

- RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page

- Mark as New
- Bookmark
- Subscribe
- RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

03-14-2017 10:38 PM

```
/* 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

- Mark as New
- Bookmark
- Subscribe
- RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

Posted in reply to ayin

03-14-2017 11:13 PM

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

array ratios {&num} _001 - _#

do i=1 to #

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

- Mark as New
- Bookmark
- Subscribe
- RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

Posted in reply to ayin

03-14-2017 11:13 PM

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

array ratios {&num} _001 - _#

do i=1 to #

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.

- Mark as New
- Bookmark
- Subscribe
- RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

Posted in reply to ayin

03-15-2017 05:14 AM

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