How to pick prime,even and odd numbers using datasteps and do loops? Atleast 0 to 50?
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.
A working version of the program from @Kurt_Bremser.
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.
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;
if primes{primenumber} then output;
end;
run;
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.
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!
Still thinking about your presentation idea? The submission deadline has been extended to Friday, Nov. 14, at 11:59 p.m. ET.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.