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.
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
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.