Here's what it looks like in PROC OPTMODEL:

proc optmodel;
/* declare parameters */
set ITEMS = 1..17;
num weight {ITEMS} = [2 3 4 4 1.5 1.5 1 1 1 1 1 1 1 1 1 1 1 ];
num value {ITEMS} = [6 6 6 5 3.1 3.0 1.5 1.3 1.2 1.1 1.0 1.1 1.0 1.0 0.9 0.8 0.6];
num wtLimit = 9;

/* declare optimization problem */
var b {ITEMS} binary;
max MaxValue = sum {i in ITEMS} value[i] * b[i];
con KnapsackCon:
sum {i in ITEMS} weight[i] * b[i] <= wtLimit;

/* call MILP solver */
solve;

/* print solution */
num MaxWeight = KnapsackCon.body;
print MaxValue MaxWeight;
print b;
set SELECTED_ITEMS = {i in ITEMS: b[i].sol > 0.5};
print {i in SELECTED_ITEMS} value {i in SELECTED_ITEMS} weight;
quit;