I apologize but I'm not sure what you would even call this problem. I have some data that provide a numeric code for race as follows:
hispanic(1) + american_indian_or_alaska_native(2) + asian(4) + black_or_african_american(8) + native_hawaiian_or_other_pacific_islander(16) + white(32)
So for example, a 5 represents a person who identifies as Asian and Hispanic (4 + 1), and a 25 represents a person who identifies as Pacific Islander, Black, and Hispanic (16 + 8 + 1).
I am trying to write a program that will retrieve what races are present from the given number. I figure there must be an equation that can determine the combination without detailing every unique combination, but I might be wrong! I tried to think about using modulo but I didn't get very far.
Thanks, and if you have suggestions for tags, please comment as I'm not sure where this fits into mathematics.
*edit Thanks everyone! This really helped me to think about the problem and generate an efficient solution. Answering my question didn't depend on using SAS but here is the SAS code I ended up using, which I think shows intuitively how to solve the problem:
data want;
set have;
/* convert decimal to 6-place binary */
eth_bin = put(ethnicity, binary6.);
/* if 1st digit is 1 then race is present, and so on*/
if substr(eth_bin, 1, 1) = 1 then white = "Yes";
if substr(eth_bin, 2, 1) = 1 then pacific_islander = "Yes";
if substr(eth_bin, 3, 1) = 1 then black = "Yes";
if substr(eth_bin, 4, 1) = 1 then asian = "Yes";
if substr(eth_bin, 5, 1) = 1 then american_indian = "Yes";
if substr(eth_bin, 6, 1) = 1 then hispanic = "Yes";
run;
Based on your example, I think the right SAS syntax to do it by bit manipulation would be something like
Note that this works because
which could come handy if you need to do more complex processing where a loop would be nicer than repeating the same code six times.