BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
GeorgeSAS
Lapis Lazuli | Level 10

The third row of dataset New, the column visit should  be 'Missing',why I got 'Retreat'?

 

Here is SAS code:

data old;
input sitesub $ vtype vdate $;
cards;
01-303 1.4 12/23/2005
01-304 1.5 09/03/2005
01-308 . 04/30/2005
01-305 1.4 10/09/2005
01-306 1.5 11/17/2005
01-307 1.5 05/29/2005

;
run;
data new;
set old;
length visit $20;
visit=ifc(vtype=1.4,'Baseline','Retreat','Missing');
run;

 

1 ACCEPTED SOLUTION

Accepted Solutions
art297
Opal | Level 21

It's not working as expected because the result of the comparison if vtype=1.4 can only be true or false, thus never has a missing value.

 

You can get it to do what you want by nesting two ifc functions:

 

data new;
  set old;
  length visit $20;
  visit=ifc(missing(vtype),'Missing',ifc(vtype=1.4,'Baseline','Retreat'));
run;

 

Alternatively, you could express the condition in a form that would set it to missing if the value were missing. e.g.,

data new;
  set old;
  length visit $20;
  visit=ifc(1.4*(vtype eq 1.4),'Baseline','Retreat','Missing');
run;

 

Art, CEO, AnalystFinder.com

 

View solution in original post

2 REPLIES 2
art297
Opal | Level 21

It's not working as expected because the result of the comparison if vtype=1.4 can only be true or false, thus never has a missing value.

 

You can get it to do what you want by nesting two ifc functions:

 

data new;
  set old;
  length visit $20;
  visit=ifc(missing(vtype),'Missing',ifc(vtype=1.4,'Baseline','Retreat'));
run;

 

Alternatively, you could express the condition in a form that would set it to missing if the value were missing. e.g.,

data new;
  set old;
  length visit $20;
  visit=ifc(1.4*(vtype eq 1.4),'Baseline','Retreat','Missing');
run;

 

Art, CEO, AnalystFinder.com

 

Tom
Super User Tom
Super User

IFC() might be a useful function in the right place, but this example is one where using normal IF/THEN is probably better.

data new;
set old;
length visit $20;
if missing(vtype) then visit='Missing';
else if vtype=1.4 then visit='Baseline';
else visit='Retreat';
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
  • 2 replies
  • 1322 views
  • 3 likes
  • 3 in conversation