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;



sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

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.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

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