@dchanson wrote: I didn't know there were other missing values other than . for numeric. This is great news! Thank you! I am learning so much and just on my first post! I appreciate it so much!
One of the advantages of the special missing as you could use different values for specific meanings and with a custom format you can even get that information displayed.
proc format library=work;
invalue qcode
"Yes" = 1
"No" = 0
"Don't Know" = .D
"Refused" = .R
other = _error_
;
value qcode
1="Yes"
0="No"
.D="Don't Know"
.R="Refused"
;
run;
data example;
infile datalines dlm=',' truncover;
informat q1 - q2 qcode.;
input q1 q2;
datalines;
Yes,No
Don't Know,Yes
No,Refused
No,Yes
Yes,Maybe
;
run;
proc freq data=example;
run;
proc print data=example;
format q1 q2 qcode.;
run;
The above reads in line data from the data lines but reading a text file would be similar so that the question codes are read directly into numeric values or special missing. The invalue optional statement Other=_error_ generates an error message in the log about invalid data when an unexpected value is encountered, VERY useful if you have an explicit list of acceptable values in case something fudges the data source. The resulting value assigned is simple missing. So later one you can tell partially that the recorded value was actually unexpected. There are lots of variations on this theme.
The Proc freq shows an example that the special missing are not included in the counts.
Proc Print shows how to display the original values using a complimentary format.
And if you want to show counts including the special missing:
Proc freq data=example;
tables q1 q2 / missing;
format q1 q2 qcode.;
run;
Where the option / missing says that I want to see the missing the resulting count. There are a fair number of procedures that have the option to display or use missing values and if used with the format each level of missing is treated as a group for output just like the counts for Yes and No.
... View more