Hello, I'm in the process of cleaning a dataset (from a survey) using SAS 9.4 and I'm trying to figure out a more streamlined process for cleaning one of the variables (called Q12). For this question, people were allowed to select more than one response, and all of their choices were combined into one variable (Q12), separated by commas. There were 14 choices that they could select. An example of what the data looks like is below: ID Q12 1 1,2,3,4,5 2 4,11,13 3 6,7,8,9,10,11 I am trying to re-code Q12 into 14 variables corresponding to each of the question choices. For example, I would create a new variable called Q12_1 for all of the people who selected choice 1 and it would be coded 0 or 1 (0= did not select, 1 = did select), and so on and so forth. I was going to use the INDEX function to pull the choice # (1-14) in Q12, and I could just do this 14 times, but I wanted a more efficient way of doing it. Here's the code I could use: DATA TEST; SET CLEAN_DATASET; if index(Q12, "1") then Q12_1 = 1; else if Q12 = ' ' then Q12_1 = .; else Q12_1 = 0; RUN; I could repeat this IF statement 14 times, swapping out the "1" for every choice #, but I want to learn how to do this using some kind of loop like an array to save myself time. However, I've been running into trouble because I can't figure out how to create a loop of the numbers 1-14 in the code below: DATA TEST; SET CLEAN_DATASET; array X [14] Q12_1 Q12_2 Q12_3 Q12_4 Q12_5 Q12_6 Q12_7 Q12_8 Q12_9 Q12_10 Q12_11 Q12_12 Q12_13 Q12_14; do i = 1 to 14; if index(Q12, "i") then X[i] = 1; else if Q12 = ' ' then X[i] = .; else X[i] = 0; end; Drop i; RUN; I seem to be running into trouble with the INDEX function. When I ran this, my newly created variables only contained 0's and blanks, instead of 1's as well. I also tried adding another DO loop and a temporary array but that didn't work either. Any suggestions?? Thank you!
... View more