data have;
input type$ @@;
datalines;
A B
;
data next;
set have;
if type=. or type=' ' then type_ind=0;
else if type='A' then type_ind=1;
else type_ind=2;
run;
can somebody tell me whey type_ind return all 0?
I know remove 'type=.' will fix the problem,
but how that piece of code affects the results?
Shouldn't it be ignored in the process?
Thanks.
Joe
You asked SAS to convert your character variable TYPE to a number so that it could compare it the numeric missing value. Since 'A' and 'B' cannot convert to numbers the result is a missing value. Hence your IF condition is true. Either use the MISSING() function as it will handle both numeric and character values.
if missing(TYPE) then ...
You clearly know that TYPE is character since your other IF statements reference values like 'A', so why did you try to compare TYPE to numeric missing value? Perhaps you do not understand how SAS stores character variables? SAS stores character variables as fixed length strings that automatically padded on the right with spaces. It will trim trailing spaces in most comparisons automatically and treats a values that only contains spaces the same as a missing value.
This i sbecause you care comparing character variable with numerical value. This will work
data have;
input type $ @@;
datalines;
A B
;
data next;
set have;
if type=' ' or missing(type) then type_ind=0;
else if type='A' then type_ind=1;
else type_ind=2;
run;
You asked SAS to convert your character variable TYPE to a number so that it could compare it the numeric missing value. Since 'A' and 'B' cannot convert to numbers the result is a missing value. Hence your IF condition is true. Either use the MISSING() function as it will handle both numeric and character values.
if missing(TYPE) then ...
You clearly know that TYPE is character since your other IF statements reference values like 'A', so why did you try to compare TYPE to numeric missing value? Perhaps you do not understand how SAS stores character variables? SAS stores character variables as fixed length strings that automatically padded on the right with spaces. It will trim trailing spaces in most comparisons automatically and treats a values that only contains spaces the same as a missing value.
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.