Hello everyone, I'm currently working on a code that aims to create choice sets. I try to reduce the number of choice sets, but I'm encountering an error message and I'm unsure how to resolve it. My goal is to reduce the choice sets to 10, but the code is not functioning as expected, while it works for 18 choice sets. Here is the relevant code snippet: title ’WTP’;
%mktruns(17 2 2 2 2)
%mktex(17 2 2 2 2, n=68,
seed = 70)
%macro res3;
x1 = x[1,1];
x2 = x[1,2];
x3 = x[1,3];
x4 = x[1,4];
x5 = x[1,5];
x6 = x[2,1];
x7 = x[2,2];
x8 = x[2,3];
x9 = x[2,4];
x10 = x[2,5];
x11 = x[3,1];
x12 = x[3,2];
x13 = x[3,3];
x14 = x[3,4];
x15 = x[3,5];
x16 = x[4,1];
x17 = x[4,2];
x18 = x[4,3];
x19 = x[4,4];
x20 = x[4,5];
c1 = x2 + x3 + x4 + x5;
c2 = x7 + x8 + x9 + x10;
c3 = x12 + x13 + x14 + x15;
c4 = x17 + x18 + x19 +x20;
if c1 < c2 & x1 >= x6 then bad = 1;
if c2 < c1 & x6 >= x1 then bad = bad + 1;
if c2 < c3 & x6 >= x11 then bad = bad + 1;
if c3 < c2 & x11 >= x6 then bad = bad + 1;
if c1 < c3 & x1 >= x11 then bad = bad + 1;
if c3 < c1 & x11 >= x1 then bad = bad + 1;
if c1 < c4 & x1 >= x16 then bad = 1 + 1;
if c4 < c1 & x16 >= x1 then bad = bad + 1;
if c2 < c4 & x6 >= x16 then bad = bad + 1;
if c4 < c2 & x16 >= x6 then bad = bad + 1;
if c4 < c3 & x16 >= x11 then bad = bad + 1;
if c3 < c4 & x11 >= x16 then bad = bad + 1;
/*if x1 = x5 | x1 = x9 | x5=x9 then bad = bad + 1;*/
if x2 = x7 & x3 = x8 & x4 = x9 & x5 = x10 then bad = bad + 1;
if x2 = x12 & x3 = x13 & x4 = x14 & x5 = x15 then bad = bad + 1;
if x2 = x17 & x3 = x18 & x4 = x19 & x5 = x20 then bad = bad + 1;
if x7 = x12 & x8 = x13 & x9 = x14 & x10 = x15 then bad = bad + 1;
if x7 = x17 & x8 = x18 & x9 = x19 & x10 = x20 then bad = bad + 1;
if x2 = 1 & x3 = 1 & x4 = 1 & x5 = 1 then bad = bad + 1;
if x7 = 1 & x8 = 1 & x9 = 1 & x10 = 1 then bad = bad + 1;
if x12 = 1 & x13 = 1 & x14 = 1 & x15 = 1 then bad = bad + 1;
if x17 = 1 & x18 = 1 & x19 = 1 & x20 = 1 then bad = bad + 1;
%mend;
%choiceff(data=randomized, /* candidate set of alternatives */
model=class(x1-x5 / sta), /* model with stdzd orthogonal coding */
nsets=10, /* number of choice sets */
seed=70, /* random number seed */
flags=4, /* 4 alternatives, generic candidates */
options=relative
nodups, /* display relative D-efficiency */
beta=zero,
restrictions=res3,
resvars=x1-x5,
maxiter=50,
bestout=desres2) /* assumed beta vector, Ho: b=0 */
proc print data=desres2; id set; by set; var x:; run;
%mktdups(generic, data=desres2, factors=x1-x5, nalts=4)
proc format;
value price
1=0.25 2=0.50 3=0.75 4=1.00 5=1.25 6=1.50 7=1.75 8=2.00
9=2.25 10=2.50 11=2.75 12=3.00 13=3.25 14=3.50 15=3.75 16=4.00 17=4.25;
value location 1="no" 2="yes";
value financial 1="no" 2="yes";
value health 1="no" 2="yes";
value browsinghistory 1="no" 2="yes";
run;
data desres2;
set desres2;
format x1 price. x2 location. x3 financial. x4 health. x5 browsinghistory. ;
label x1 = "Price" x2 = "Location" x3 = "Financial" x4 = "Health" x5= "Browsinghistory";
rename x1 = Price x2 = Location x3 = Financial x4 = Health x5 = Browsinghistory ;
run;
proc print label; id set; by set; run;
proc print data=desres2; id set; by set; run;
%choiceff(data=desres2, /* candidate set of alternatives */
init=desres2(keep=index), /* select these alts from candidates */
intiter=0, /* evaluate without internal iterations */
model=class(price location financial health browsinghistory/ sta), /* model with stdz orthogonal coding */
nsets=10, /* number of choice sets */
flags=4,
seed=70, /* 4 alternatives, generic candidates */
options=relative, /* display relative D-efficiency */
beta=zero) /* assumed beta vector, Ho: b=0 */ The error message I'm receiving is: 185 %choiceff(data=desres2, /* candidate set of alternatives */
186 init=desres2(keep=index), /* select these alts from candidates */
187 intiter=0, /* evaluate without internal iterations */
188 model=class(price location financial health browsinghistory/ sta), /* model with stdz orthogonal coding */
189 nsets=10, /* number of choice sets */
190 flags=4,
191 seed=70, /* 4 alternatives, generic candidates */
192 options=relative, /* display relative D-efficiency */
193 beta=zero) /* assumed beta vector, Ho: b=0 */
ERROR: (execution) Invalid subscript or subscript out of range.
operation : [ at line 185 column 1
operands : cand, indvec,
cand 40 rows 20 cols (numeric)
indvec 1 row 40 cols (numeric)
statement : ASSIGN at line 185 column 1
ERROR: The CHOICEFF macro ended abnormally.
NOTE: The CHOICEFF macro used 0.09 seconds.
194
195
196
197
198
199
200
201
202
203
204
205
206
207 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK;
217 It seems that the error lies in the line segment 185, but I can't understand exactly what the issue is. I have checked the variables, but they appear to be correct. Could someone please assist me in identifying the error and understanding why the code is not functioning as expected? Thank you in advance for your assistance!
... View more