DATA Step, Macro, Functions and more

Why ifc not work as I expected

Accepted Solution Solved
Reply
Regular Contributor
Posts: 241
Accepted Solution

Why ifc not work as I expected

[ Edited ]

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;

 


Accepted Solutions
Solution
‎05-06-2017 10:02 PM
PROC Star
Posts: 7,473

Re: Why ifc not work as I expected

[ Edited ]
Posted in reply to GeorgeSAS

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


All Replies
Solution
‎05-06-2017 10:02 PM
PROC Star
Posts: 7,473

Re: Why ifc not work as I expected

[ Edited ]
Posted in reply to GeorgeSAS

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

 

Super User
Super User
Posts: 7,046

Re: Why ifc not work as I expected

Posted in reply to GeorgeSAS

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;
☑ This topic is solved.

Need further help from the community? Please ask a new question.

Discussion stats
  • 2 replies
  • 178 views
  • 3 likes
  • 3 in conversation