BookmarkSubscribeRSS Feed
AlotaibiA

Occasional Contributor

Joined:

Dec 12, 2018

Loop with conditions

Hi

 

I have a dataset of students and I want to predict their allotment based on three conditions (Higher GPA, their five preferences, limited seating).  For example a person with a high GPA should be assigned to her 1st preferences till the seats are full then it should move to the next preferences.  

 

YearWish 1Wish 2Wish 3Wish 4Wish 5GPAAllotment
2016MedicinePharmacyNursingDentistryPhysiotherapy5 
2016Occupational TherapyPharmacyDiagnostic RadiologyEpidemiology Nursing 4.8 
...etc       

 

 

I have 12 programs and they have limited seating for each.

 

I looked into loop scripting but couldn't figure out how to include conditions in it.

9 REPLIES
Highlighted
Craige_Hales

Staff

Joined:

Mar 21, 2013

Re: Loop with conditions

something like this. Do a lot of testing before you mail out the assignments, this is bound to have some unhandled edge cases!

dtPrefs = New Table( "Preferences", 
	New Column( "Year", Set Values( [2016, 2016, 2016, 2016, 2016, 2016] ) ),
	New Column( "Wish 1",character, Set Values( {"Medicine", "Occupational Therapy", "Medicine", "Occupational Therapy", "Medicine", "Occupational Therapy"} )),
	New Column( "Wish 2",character, Set Values( {"Pharmacy", "Pharmacy", "Pharmacy", "Pharmacy", "Pharmacy", "Pharmacy"} ) ),
	New Column( "Wish 3",character, Set Values( {"Nursing", "Diagnostic Radiology", "Nursing", "Diagnostic Radiology", "Nursing", "Diagnostic Radiology"} ) ),
	New Column( "Wish 4",character, Set Values( {"Dentistry", "Epidemiology", "Dentistry", "Epidemiology", "Dentistry", "Epidemiology"} ) ),
	New Column( "Wish 5",character, Set Values( {"Physiotherapy", " Nursing", "Physiotherapy", " Nursing", "Physiotherapy", " Nursing"} ) ),
	New Column( "GPA", Set Values( [4, 4.8, 4.7, 4.6, 4.9, 4.3] ) ),
	New Column( "Allotment",character, Set Values( {"", "", "", "", "", ""} ) ),
	New Column( "ID", Format( "Best", 12 ), Set Values( [11, 12, 13, 14, 15, 16] ) )
);

dtSeats = New Table( "Seats Available",
	Add Rows( 8 ),
	New Column( "Program",character,Set Values({"Medicine", "Pharmacy", "Nursing", "Dentistry", "Physiotherapy", "Occupational Therapy", "Diagnostic Radiology", "Epidemiology"})	),
	New Column( "seats", Set Values( [1, 1, 1, 2, 2, 2, 2, 2] ) )
);

// sort the prefs, do the high GPAs first
dtPrefs << sort( by( GPA ), order( descending ), ReplaceTable );

// build a lookup table for the Program-to-Rownumber in the seats table
lookup = Associative Array();
For( iSeat = 1, iSeat <= N Rows( dtSeats ), iSeat += 1, 
	// use uppercase lookups, just in case 
	lookup[Uppercase( dtSeats:Program[iSeat] )] = iSeat
);

// assign the seats
For( iStudent = 1, iStudent <= N Rows( dtPrefs ), iStudent += 1, 
	// get the list of prefs for this student
	preflist = dtPrefs[iStudent, {Wish 1, Wish 2, Wish 3, Wish 4, Wish 5}];
	answer = "";
	While( answer == "" & N Items( preflist ) > 0,
		pref = Remove From( preflist, 1 );
		pref = pref[1]; // get first item from list of one item
		pref = Uppercase( pref );
		seatrow = Try( lookup[pref], -1 ); // handle unknown preference?
		If( dtSeats:seats[seatrow] > 0,
			dtPrefs:Allotment[iStudent] = answer = pref;
			dtSeats:seats[seatrow] -= 1;
		);
	);
);

Notes:

  • the sort could use a second variable to break ties in GPAs. (Application date?)
  • the -1 for the unknown pref is not handled
  • there might be a better strategy involving more 2nd choices and fewer 3rd choices
Craige
AlotaibiA

Occasional Contributor

Joined:

Dec 12, 2018

Re: Loop with conditions

It worked! Thanks a lot.  Through half way of the students, their preferences ran out of seats.  So what I would like to do is, I have ranked order the preferences and i would like to assign the students based on the ranked order if the seats ran out.  How can I do that? 

Craige_Hales

Staff

Joined:

Mar 21, 2013

Re: Loop with conditions

I think there are a lot of possible answers, including reassigning instructors from unpopular programs, but I think this is the answer you might want:

Let the JSL run all the way before dealing with unassigned students. It would seem wrong to give a student a random program when there might be a student further down that really wants that program.

If there are only a few, 10 or so, just do them by hand, perhaps looking at the desired programs and making an informed decision from the remaining seats. Or, if there is only one program left, give that to everybody that still has no assigned program.

But, if there are 100s to deal with, you can do something like this (completely untested code follows):


// force overflow students into alternate program

For( iStudent = 1, iStudent <= N Rows( dtPrefs ), iStudent += 1,
	If( dtPrefs:Allotment[iStudent] == "", // no program assigned in first round
		// choices here, it might makes sense to use the program with
		// the most seats available, balancing the instructor’s loads,
		// or the fewest seats available, giving out more popular programs
		// and maybe eliminating programs with no seats taken.
		
		seatrow = Loc Max( dtSeats[0, "seats"] );		
		// use lowercase to make it easy to see them
		If( dtSeats:seats[seatrow] > 0,
			dtPrefs:Allotment[iStudent] = Lowercase( dtSeats:program[seatrow] );
			dtSeats:seats[seatrow] -= 1;
		,
			Throw( "Need more seats!" )
		);
	)
);

I'm just suggesting the lowercase function while you are debugging the script; it will make seeing the results in the data table easier.

 

Craige
AlotaibiA

Occasional Contributor

Joined:

Dec 12, 2018

Re: Loop with conditions

Good suggestion I will look into it.  This worked as well.  But if I wanted to to assign the students based on a preferences ranking system that I have made only if seats ran out, how can I do that?  I have thousands of students I need to predict assign them, based on changes in the scoring criteria, and compare them to the original data.  

Craige_Hales

Staff

Joined:

Mar 21, 2013

Re: Loop with conditions

instead of

seatrow = Loc Max( dtSeats[0, "seats"] );

you'll need some other way to choose an available seat. Maybe using a table of 12rows x 11cols entries:

           Ranked alternatives

Original first pref

alt1 alt2 alt3 ...
medicine first most-like medicine second most-like medicine third most-like medicine ...
pharmacy first most-like pharmacy ...    
...        
...       ...

 

(This table should be in the same order as dtSeats to make the lookup(FirstChoice) tell you to use row N.)

the table in JSL might be a list of lists:

alternative = { 

{ "first medicine", ..., "11th medicine" }, 

{ "first pharmacy",..."11th pharmacy"},

...

{...} // 12th row of alternatives to Epidemiology

};

 

then something like 

 

StudentsFirstChoice = dtPrefs:Wish1[iStudent];

for(ialternative=1,iAlternative<=11, iAlternitive+=1,

    alt = alternative[lookup(StudentsFirstChoice), ialternative]; // try the ranked alternatives in order

    if (dtSeats:seats[ lookup(alt) ] > 0, seatrow=ialternative; break(););

);

 

should find the first preferred alternative for medicine that still has seats available.

 

The 12X11 table could also be part of the 12-row dtSeats table. It might make a lot of sense to keep it there so when a new program is added to dtSeats it will be natural to update the alternatives at the same time. 

 

 

(side note: you started this thread in an infrequently used part of the JMP community for discussing problems with the community itself. You might get a better range of answers if you repost under the Discussions tab. There are probably several other people there that would find the question interesting, especially the statistical element you are asking about -- ranking -- that I'm not the best to answer.)

 

Craige
Craige_Hales

Staff

Joined:

Mar 21, 2013

Re: Loop with conditions

Hm. Looks like there are 8 programs, not 12. that table is 8 rows of 7 entries. Sorry! 

No, I did see 12 in your original post...I extracted only 8 from it. Never mind.

Craige
AlotaibiA

Occasional Contributor

Joined:

Dec 12, 2018

Re: Loop with conditions

It didn't work.  Where did I made a mistake? 

 

 

dtPrefs = Data Table( "Sample.jmp" ) << Subset(
	Selected Rows( 0 ),
	Rows(
		[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
		22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
		41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
		60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
		79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
		98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
		114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
		129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
		144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
		159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173,
		174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
		189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203,
		204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218,
		219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
		234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248,
		249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263,
		264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
		279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
		294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308,
		309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323,
		324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338,
		339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353,
		354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368,
		369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383,
		384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398,
		399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413,
		414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428,
		429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443,
		444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458,
		459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473,
		474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488,
		489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503,
		504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518,
		519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533,
		534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548,
		549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563,
		564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578,
		579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593,
		594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608,
		609, 610, 611, 613]
	),
	Selected columns only( 0 )
);

dtSeats = New Table( "Seats Available",
	Add Rows( 15 ),
	New Column( "Program",character,Set Values({"Medicine", "Dentistry", "Pharmacy", "HRS - Rehab - Occupational Therapy", "HRS - MT - Nuclear Medicine",  "HRS - Rehab - Physiotherapy", "HRS - CS - Hearing and Balance", "HRS - CS - Speech, Swallowing, and Language Diseases", "HRS - HS - Clinical Nutrition",  "HRS - MT - Ultrasound Techniques", "HRS - MT - Diagnostic Radiology", "HRS - HS - Epi", "HRS - HS - Clinical Physcology", "HRS - HS - HA", "Nursing"})	),
	New Column( "seats", Set Values( [71, 40, 126, 30, 0, 31, 19, 0, 0, 18, 18, 36, 32, 45, 146] ) ),
	New Column( "alt1", character,Set Values({"Medicine", "Medicine", "Medicine", "Medicine", "Medicine", "Medicine", "Medicine", "Medicine", "Medicine", "Medicine", "Medicine", "Medicine", "Medicine", "Medicine", "Medicine"})),
	New Column( "alt2", character,Set Values({"Dentistry", "Dentistry", "Dentistry", "Dentistry", "Dentistry", "Dentistry", "Dentistry", "Dentistry", "Dentistry", "Dentistry", "Dentistry", "Dentistry", "Dentistry", "Dentistry", "Dentistry"})),
	New Column( "alt3", character,Set Values({"Pharmacy", "Pharmacy", "Pharmacy", "Pharmacy", "Pharmacy", "Pharmacy", "Pharmacy", "Pharmacy", "Pharmacy", "Pharmacy", "Pharmacy", "Pharmacy", "Pharmacy", "Pharmacy", "Pharmacy"})),
	New Column( "alt4", character,Set Values({"HRS - Rehab - Occupational Therapy", "HRS - Rehab - Occupational Therapy", "HRS - Rehab - Occupational Therapy", "HRS - Rehab - Occupational Therapy", "HRS - Rehab - Occupational Therapy", "HRS - Rehab - Occupational Therapy", "HRS - Rehab - Occupational Therapy", "HRS - Rehab - Occupational Therapy", "HRS - Rehab - Occupational Therapy", "HRS - Rehab - Occupational Therapy", "HRS - Rehab - Occupational Therapy", "HRS - Rehab - Occupational Therapy", "HRS - Rehab - Occupational Therapy", "HRS - Rehab - Occupational Therapy", "HRS - Rehab - Occupational Therapy"})),
	New Column( "alt5", character,Set Values({"HRS - MT - Nuclear Medicine", "HRS - MT - Nuclear Medicine", "HRS - MT - Nuclear Medicine", "HRS - MT - Nuclear Medicine", "HRS - MT - Nuclear Medicine", "HRS - MT - Nuclear Medicine", "HRS - MT - Nuclear Medicine", "HRS - MT - Nuclear Medicine", "HRS - MT - Nuclear Medicine", "HRS - MT - Nuclear Medicine", "HRS - MT - Nuclear Medicine", "HRS - MT - Nuclear Medicine", "HRS - MT - Nuclear Medicine", "HRS - MT - Nuclear Medicine", "HRS - MT - Nuclear Medicine"})),
	New Column( "alt6", character,Set Values({"HRS - Rehab - Physiotherapy", "HRS - Rehab - Physiotherapy", "HRS - Rehab - Physiotherapy", "HRS - Rehab - Physiotherapy", "HRS - Rehab - Physiotherapy", "HRS - Rehab - Physiotherapy", "HRS - Rehab - Physiotherapy", "HRS - Rehab - Physiotherapy", "HRS - Rehab - Physiotherapy", "HRS - Rehab - Physiotherapy", "HRS - Rehab - Physiotherapy", "HRS - Rehab - Physiotherapy", "HRS - Rehab - Physiotherapy", "HRS - Rehab - Physiotherapy", "HRS - Rehab - Physiotherapy"})),
	New Column( "alt7", character,Set Values({"HRS - CS - Hearing and Balance", "HRS - CS - Hearing and Balance", "HRS - CS - Hearing and Balance", "HRS - CS - Hearing and Balance", "HRS - CS - Hearing and Balance", "HRS - CS - Hearing and Balance", "HRS - CS - Hearing and Balance", "HRS - CS - Hearing and Balance", "HRS - CS - Hearing and Balance", "HRS - CS - Hearing and Balance", "HRS - CS - Hearing and Balance", "HRS - CS - Hearing and Balance", "HRS - CS - Hearing and Balance", "HRS - CS - Hearing and Balance", "HRS - CS - Hearing and Balance"})),
	New Column( "alt8", character,Set Values({"HRS - CS - Speech, Swallowing, and Language Diseases", "HRS - CS - Speech, Swallowing, and Language Diseases", "HRS - CS - Speech, Swallowing, and Language Diseases", "HRS - CS - Speech, Swallowing, and Language Diseases", "HRS - CS - Speech, Swallowing, and Language Diseases", "HRS - CS - Speech, Swallowing, and Language Diseases", "HRS - CS - Speech, Swallowing, and Language Diseases", "HRS - CS - Speech, Swallowing, and Language Diseases", "HRS - CS - Speech, Swallowing, and Language Diseases", "HRS - CS - Speech, Swallowing, and Language Diseases", "HRS - CS - Speech, Swallowing, and Language Diseases", "HRS - CS - Speech, Swallowing, and Language Diseases", "HRS - CS - Speech, Swallowing, and Language Diseases", "HRS - CS - Speech, Swallowing, and Language Diseases", "HRS - CS - Speech, Swallowing, and Language Diseases"})),
	New Column( "alt9", character,Set Values({"HRS - HS - Clinical Nutrition", "HRS - HS - Clinical Nutrition", "HRS - HS - Clinical Nutrition", "HRS - HS - Clinical Nutrition", "HRS - HS - Clinical Nutrition", "HRS - HS - Clinical Nutrition", "HRS - HS - Clinical Nutrition", "HRS - HS - Clinical Nutrition", "HRS - HS - Clinical Nutrition", "HRS - HS - Clinical Nutrition", "HRS - HS - Clinical Nutrition", "HRS - HS - Clinical Nutrition", "HRS - HS - Clinical Nutrition", "HRS - HS - Clinical Nutrition", "HRS - HS - Clinical Nutrition"})),
	New Column( "alt10", character,Set Values({"HRS - MT - Ultrasound Techniques", "HRS - MT - Ultrasound Techniques","HRS - MT - Ultrasound Techniques","HRS - MT - Ultrasound Techniques","HRS - MT - Ultrasound Techniques","HRS - MT - Ultrasound Techniques","HRS - MT - Ultrasound Techniques","HRS - MT - Ultrasound Techniques","HRS - MT - Ultrasound Techniques","HRS - MT - Ultrasound Techniques","HRS - MT - Ultrasound Techniques","HRS - MT - Ultrasound Techniques","HRS - MT - Ultrasound Techniques","HRS - MT - Ultrasound Techniques","HRS - MT - Ultrasound Techniques"})),
	New Column( "alt11", character,Set Values({"HRS - MT - Diagnostic Radiology", "HRS - MT - Diagnostic Radiology", "HRS - MT - Diagnostic Radiology", "HRS - MT - Diagnostic Radiology", "HRS - MT - Diagnostic Radiology", "HRS - MT - Diagnostic Radiology", "HRS - MT - Diagnostic Radiology", "HRS - MT - Diagnostic Radiology", "HRS - MT - Diagnostic Radiology", "HRS - MT - Diagnostic Radiology", "HRS - MT - Diagnostic Radiology", "HRS - MT - Diagnostic Radiology", "HRS - MT - Diagnostic Radiology", "HRS - MT - Diagnostic Radiology", "HRS - MT - Diagnostic Radiology"})),
	New Column( "alt12", character,Set Values({"HRS - HS - Epi", "HRS - HS - Epi", "HRS - HS - Epi", "HRS - HS - Epi", "HRS - HS - Epi", "HRS - HS - Epi", "HRS - HS - Epi", "HRS - HS - Epi", "HRS - HS - Epi", "HRS - HS - Epi", "HRS - HS - Epi", "HRS - HS - Epi", "HRS - HS - Epi", "HRS - HS - Epi", "HRS - HS - Epi"})),
	New Column( "alt13", character,Set Values({"HRS - HS - Clinical Physcology", "HRS - HS - Clinical Physcology", "HRS - HS - Clinical Physcology", "HRS - HS - Clinical Physcology", "HRS - HS - Clinical Physcology", "HRS - HS - Clinical Physcology", "HRS - HS - Clinical Physcology", "HRS - HS - Clinical Physcology", "HRS - HS - Clinical Physcology", "HRS - HS - Clinical Physcology", "HRS - HS - Clinical Physcology", "HRS - HS - Clinical Physcology", "HRS - HS - Clinical Physcology", "HRS - HS - Clinical Physcology", "HRS - HS - Clinical Physcology"})),
	New Column( "alt14", character,Set Values({"HRS - HS - HA", "HRS - HS - HA", "HRS - HS - HA", "HRS - HS - HA", "HRS - HS - HA", "HRS - HS - HA", "HRS - HS - HA", "HRS - HS - HA", "HRS - HS - HA", "HRS - HS - HA", "HRS - HS - HA", "HRS - HS - HA", "HRS - HS - HA", "HRS - HS - HA", "HRS - HS - HA"})),
	New Column( "alt15", character,Set Values({"Nursing", "Nursing", "Nursing", "Nursing", "Nursing", "Nursing", "Nursing", "Nursing", "Nursing", "Nursing", "Nursing", "Nursing", "Nursing", "Nursing", "Nursing"}))
	
);

// sort the prefs, do the high GPAs first
dtPrefs << sort( by( Predicted PrepGPA By Year ), order( descending ), ReplaceTable );

// build a lookup table for the Program-to-Rownumber in the seats table
lookup = Associative Array();
For( iSeat = 1, iSeat <= N Rows( dtSeats ), iSeat += 1, 
	// use uppercase lookups, just in case 
	lookup[Uppercase( dtSeats:Program[iSeat] )] = iSeat
);

// assign the seats
For( iStudent = 1, iStudent <= N Rows( dtPrefs ), iStudent += 1, 
	// get the list of prefs for this student
	preflist = dtPrefs[iStudent, {Wish 1, Wish 2, Wish 3, Wish 4, Wish 5}];
	answer = "";
	While( answer == "" & N Items( preflist ) > 0,
		pref = Remove From( preflist, 1 );
		pref = pref[1]; // get first item from list of one item
		pref = Uppercase( pref );
		seatrow = Try( lookup[pref], -1 ); // handle unknown preference?
		If( dtSeats:seats[seatrow] > 0,
			dtPrefs:Predicted Allotment[iStudent] = answer = pref;
			dtSeats:seats[seatrow] -= 1;
		);
	);
);

StudentsFirstChoice = dtPrefs:Wish1[iStudent];
for(ialternative=1,iAlternative<=11, iAlternitive+=1,
    alt = alternative[lookup(StudentsFirstChoice), ialternative]; // try the ranked alternatives in order
    if (dtSeats:seats[ lookup(alt) ] > 0, seatrow=ialternative; break();
		dtPrefs:Predicted Allotment[iStudent] = answer = pref;
		dtSeats:seats[seatrow] -= 1;
	);
);

 

Craige_Hales

Staff

Joined:

Mar 21, 2013

Re: Loop with conditions

The messages in the JMP log window will tell you a lot about what happened. You can also use the show(variable); statement to write information to the log window to trace what is happening.

 

 

The previous working program used a simple way to pick an alternative program: find the program with the most available seats.

The snippet with the alternatives idea was intended to replace just a single line with a more sophisticated way to choose a program.

You'll need to place it inside the loop that is processing each student with no program assigned.

 

I may have made the ranked alternatives more complicated than needed; it looks like you have just a single ranking that you'll use for everybody, regardless of their initial choices. In that case, you could use a simpler list, or possibly just a 12-part if statement in place of the statement that picked the program with the most available seats:

 

// strategy for picking a seatrow using ranked rather than most seats available

if(dtSeats:seats[lookup("medicine")] > 0, seatrow=lookup("medicine"), // first choice

   dtSeats:seats[lookup("dentistry")] > 0, seatrow=lookup("dentistry"), // second

   ...

   dtSeats:seats[lookup("nursing")] > 0, seatrow=lookup("nursing"), // last choice

   seatrow = -999  // no seats left, anywhere!

);

 

There is also a JMP scripting index and scripting related books on the help menu.

Craige
Craige_Hales

Staff

Joined:

Mar 21, 2013

Re: Loop with conditions