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.
Don't miss out on SAS Innovate - Register now for the FREE Livestream!
Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.
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.