Calcite | Level 5

## Array help

Hello,

I am stuck at where I need to find the ith observation which is equal to the ith observation + 90. For example if my i=1 value is 2, then I need to find m?, where the value would be 2+90 = 92.

I am using this code.

data x;

set y;

array help(*) 1-370;

do i = 1 to 370;

do m = 1 to 370;

if help(i) + 90 = help(m) then leave;

end;

run;

Thank you

11 REPLIES 11
Super User

## Re: Array help

You don't need two loops.

Can you have multiple matches?

The WHICHN function can return the index of an array that contains the value you're looking for.

Do i = 1 to 370;

x=whichnhelpv(I)+ 90, of help(*));

if x>0 then leave;

end;

Garnet | Level 18

## Re: Array help

It seems like a typo defining: array help(*) 1-370;

You probably meant, something like: array help(*) v1-v370;

@Reeza you meant to write (missed open bracket):

x=whichnhelpv(I)+ 90, of help(*) );

Super User

## Re: Array help

@Shmuel Eagle eyes! Thanks!

``````Do i =1 to 370;
X = whichn(help(I) + 90, of help(*));
If x > 0 then leave;
End;``````
Calcite | Level 5

## Re: Array help

Thank you so much for the help. The codes worked, however I want x-i to be less than 180. If x-i crosses 180 then I would want to select that value of i which would give me x-i<180.

Thanks once again

Super User

## Re: Array help

If you have any other restrictions make sure to highlight them.

Calcite | Level 5

## Re: Array help

It is a dataset of students and their attendance, which is cumulative over 12 days. I need to find the earliest day when their attendance crossed 5 days over a period of 7 days.  Thank you

 ID Day1 Day2 Day3 Day4 Day5 Day6 Day7 Day8 Day9 Day10 Day11 Day12 Robin 1 2 3 4 5 6 7 8 9 10 11 12 Michael 1 2 2 3 4 5 5 6 7 8 9 10 Jeremy 1 2 3 3 4 5 6 6 7 7 7 7 Matt 1 1 1 2 2 3 3 3 4 4 5 6 Sara 1 2 3 4 5 5 5 6 6 7 8 9 Tony 1 2 2 2 2 3 3 3 4 4 4 4
Super User

## Re: Array help

What is the expected output for data?

Calcite | Level 5

## Re: Array help

Expected output

Name   Start_day  Day_crossing_5

Robin          1                   5

Michael       1                   6

Jeremy        1                  6

Matt            5                   12

Sara           1                    5

Tony           .                      .

It does not need to be the first day, if using the first day at start_date does not give the answer, then I want the program to move to the next one. In this way the start_day for Matt reached 5, because on day12 his value was 5 greater than the value(2) on day5. So over a period of 7days he crossed 5 attendace units. If you would have used day1 as start date for Matt, he would have reached only 3 by day 7. Does that help ?

Thanks,

Divyan

Garnet | Level 18

## Re: Array help

You are posting a very similar situation to your previous question.

``````array dayx day1-day12;Do i =1 to 12;
X = whichn(dayx(I) > 5 , of dayx(*));
If x > 0 then leave;
End;``` ```

Calcite | Level 5

## Re: Array help

Thank you for the answer, but then how would I restrict my lookup period to 7 days. I do not want to include any observations if they occur after 7 days.

Garnet | Level 18

## Re: Array help

I'm not sure I understand what you mean.

Anyhow, you can filter the output by adding a line after END of the DO loop, like:

IF i > 7 then delete;

Discussion stats
• 11 replies
• 1835 views
• 2 likes
• 3 in conversation