## How to pick prime,even and odd numbers using datasteps and do loops?

Frequent Contributor
Posts: 93

# How to pick prime,even and odd numbers using datasteps and do loops?

How to pick prime,even and odd numbers using datasteps and do loops? Atleast 0 to 50?

Super User
Posts: 10,574

## Re: How to pick prime,even and odd numbers using datasteps and do loops?

For odd/even use the mod() function.

For prime numbers I'd use an array and do something like

``````array primes{50} 1;
do i1 = 2 to 50;
if primes{i1}
then do;
i2 = 2 * i1;
do while (i2 lt 50);
primes{i2} = 0;
i2 + i1;
end;
end;
end;``````

After that, all elements where the index is a prime number contain a 1.

You can replace all 50's with a macro variable to make the code flexible.

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
How to convert datasets to data steps
How to post code
Frequent Contributor
Posts: 93

## Re: How to pick prime,even and odd numbers using datasteps and do loops?

When I exceute the code we have missing values in the dataset..array primes{50} 1; when we using 1 in this place I'm getting error...Is any thing need to change in it..

Super User
Posts: 2,512

## Re: How to pick prime,even and odd numbers using datasteps and do loops?

[ Edited ]

A working version of the program from @KurtBremser.

``````
data _null_;
array PRIMES{1:50} (50*1);
do I1 = 2 to 50;
if PRIMES{I1} then do;
I2 = 2 * I1;
do while (I2 lt 50);
PRIMES{I2} = 0;        putlog I1= I2= PRIMES[I2]=;
I2 + I1;
end;
end;
end;
run;``````

which is a slightly more efficient version of

``````
data _null_;
array PRIMES{1:50} (50*1);
do I1 = 2 to 50;
do I2 = I1 to 50/I1;
PRIMES{I1*I2} = 0;        putlog I1= I2= PRIMES[I1*I2]=;
end;
end;
run;``````

I added the intermediate values in the log for you to see the logic.

Note that Kurt's loops need to be tweaked at bit as they flag 50 as a prime.

Super User
Posts: 10,574

## Re: How to pick prime,even and odd numbers using datasteps and do loops?

my initial code was written without access to SAS from @home, therefore the "something like". It was meant to show the basic algorithm for creating Eratosthenes's sieve.

A working version (syntactically and semantically, thanks to @ChrisNZ):

``````data primes (keep=primenumber);
array primes{50} 3 _temporary_ (50*1);
do i1 = 2 to 50;
if primes{i1}
then do;
i2 = 2 * i1;
do while (i2 le 50);
primes{i2} = 0;
i2 + i1;
end;
end;
end;
do primenumber = 1 to 50;
end;
run;``````
---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
How to convert datasets to data steps
How to post code
Super User
Posts: 10,850

## Re: How to pick prime,even and odd numbers using datasteps and do loops?

Calling @Rick_SAS

Here is an example.

https://blogs.sas.com/content/iml/2010/09/17/a-prime-number-sieve.html

and use MOD() to get odd or even number.

Discussion stats
• 5 replies
• 677 views
• 0 likes
• 4 in conversation