BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
venkatnaveen
Obsidian | Level 7

I have:

  data even_odd;

   input x @@;

   datalines;

   257779  269998  11  20

   ;

   run;

Modify the following data step to create a new variable named as message. The values of the

       variable message must be:

      ‘The integer is odd’ if the variable x in the input statement has odd integer, ‘The integer is even’

       if the variable x has even integer.

 

Should not use  mod function

1 ACCEPTED SOLUTION

Accepted Solutions
Patrick
Opal | Level 21

Like so often there are multiple ways to get it done.

proc format;
  value even_odd
    0='The integer is odd' 
    1='The integer is even'
  ;
quit;

data even_odd;
  input x @@;
  format even_odd even_odd.;
  even_odd= (int(x/2)=x/2);
  datalines;
   257779  269998  11  20
   ;
run;

View solution in original post

8 REPLIES 8
LinusH
Tourmaline | Level 20

o what is your question?

What have you tried?

Explore the other truncation functions...

Data never sleeps
venkatnaveen
Obsidian | Level 7
question isi have variable x
23
456
78889
23 is odd a new variable message to be creted as odd .Similarlly
456 is even message has to be created even
PeterClemmensen
Tourmaline | Level 20

The most elegant way would be to use the MOD function, but since you rule this out, this is a possibility:

 

data even_odd;
   input x @@;
   datalines;
   257779 269998 1120
   ;
run;

data want(keep = x evenodd);
   set even_odd;
   y = put(x, 10.);
   
   lastdigit = substr(y,length(y),-1);

   if lastdigit in ('0', '2', '4', '6', '8') then evenodd = 'Even';
   else evenodd = 'Odd';
run;
PeterClemmensen
Tourmaline | Level 20

Or did you have something else in mind regarding your header "Using _N_" ? 

Patrick
Opal | Level 21

Like so often there are multiple ways to get it done.

proc format;
  value even_odd
    0='The integer is odd' 
    1='The integer is even'
  ;
quit;

data even_odd;
  input x @@;
  format even_odd even_odd.;
  even_odd= (int(x/2)=x/2);
  datalines;
   257779  269998  11  20
   ;
run;
Shmuel
Garnet | Level 18

If not using MOD function then you can check the right most digit:

 

string = left(x); /* convert x from numeric to characters */

digit = input(substr(string, length(string),1),1.);

if digit in ( 0 2 4 6 😎 then evn_odd = <even_message>;

else even_odd = <odd_message>;

 

enter the full text instead <even_message> or <odd_message>

venkatnaveen
Obsidian | Level 7

Thanks sir

Ksharp
Super User
Interesting question.


  data even_odd;
   input x @@;
   y=x-int(x/10)*10;
   if y in (0 2 4 6 8) then msg='Even';
    else msg='Odd ';
   datalines;
   257779  269998  11  20
   ;
   run;



hackathon24-white-horiz.png

2025 SAS Hackathon: There is still time!

Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!

Register Now

How to Concatenate Values

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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 8 replies
  • 4408 views
  • 4 likes
  • 6 in conversation