Array help

Reply
Contributor
Posts: 21

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

 

Super User
Posts: 19,151

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;

Trusted Advisor
Posts: 1,469

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
Posts: 19,151

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;
Contributor
Posts: 21

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
Posts: 19,151

Re: Array help

Please illustrate your problem with sample data amd expected output. 

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

 

Contributor
Posts: 21

Re: Array help

Please find a sample dataset

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

 

IDDay1Day2Day3Day4Day5Day6Day7Day8Day9Day10Day11Day12
Robin123456789101112
Michael1223455678910
Jeremy123345667777
Matt111223334456
Sara123455566789
Tony122223334444
Super User
Posts: 19,151

Re: Array help

What is the expected output for data?

Contributor
Posts: 21

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 

Trusted Advisor
Posts: 1,469

Re: Array help

[ Edited ]

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

Here is @Reeza's solution addapted to your last post:

 

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

 

Contributor
Posts: 21

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.

Trusted Advisor
Posts: 1,469

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;

 

Ask a Question
Discussion stats
  • 11 replies
  • 589 views
  • 2 likes
  • 3 in conversation