BookmarkSubscribeRSS Feed
☑ This topic is solved. Need further help from the community? Please sign in and ask a new question.
Santha
Pyrite | Level 9

Hi Rob

This is continuation of the old problem

Here is one shipment that I was testing: Please find data attached. I have only 1 shipment that has 32 Vol and 15000 Weight.

 

Here is my code. I have used green color to highlight my pain points:

 

proc optmodel;

set <str> ORG;
read data CASUSER.Unique_ORG into ORG = [ORG];

set <str> DES; 
read data CASUSER.Unique_DES into DES = [DES];

set <str> BOX; 
read data CASUSER.Unique_BOX into BOX = [BOX];

/*Read ISN Wt and Volume for a given ISN* - START */
set <str> ISN;
str Org_ISN {ISN};
str Des_ISN {ISN};
num Volume_ISN {ISN} init 0;
num Weight_ISN {ISN} init 0;
read data CASUSER.InputData_AssetMix into ISN=[ISN] Org_ISN=ORG Des_ISN=DES Volume_ISN=Volume Weight_ISN=Weight;
/*Read ISN Wt and Volume for a given ISN* - END*/

/*Read Wt and Volume Capacity for a given ORG, DES, BOX - START */
num Volume_Capacity {ORG,DES,BOX} init 0;  num Volume_Min {ORG,DES,BOX} init 0;
num Weight_Capacity {ORG,DES,BOX} init 0;  num Weight_Min {ORG,DES,BOX} init 0;
read data CASUSER.BOXSPECS into [ORG DES BOX] 
Volume_Capacity=Volume_Capacity
Weight_Capacity=Weight_Capacity
Volume_Min=Volume_Min
Weight_Min=Weight_Min;
/*Read Wt and Volume Capacity for a given ORG, DES, BOX - END */

/* A Binary variable that is 0 or 1 for a given asset for a given lane, 0 indicated not available, 1- available */
num Is_BoxAvalable_for_a_lane {ORG,DES,Box};
read data CASUSER.BOXSpecs into [ORG Des Box] Is_BoxAvalable_for_a_lane = BoxAvailability;


/* Decision Variable - START */
var BoxesNeeded {ISN,BOX}>=0 integer;
/* Decision Variable - END */


/*Define Rates and Implicit Variables - START */
set <str,str,str> PerBox_Based_Rate_NoZeroes;
num PerBox_Based_Rate {PerBox_Based_Rate_NoZeroes}; 
read data CASUSER.BOXRATE
(where=(RateBasis="PerBox" and Ratetype='Linehaul' and Rate>0)) 
into PerBox_Based_Rate_NoZeroes=[ORG DES BOX] PerBox_Based_Rate=Rate;
impvar PerBox_Based_Costs = sum {i in ISN, b in BOX: <Org_ISN[i],Des_ISN[i],b> in PerBox_Based_Rate_NoZeroes}
      PerBox_Based_Rate[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b];

set <str,str,str> PerVol_Based_Rate_NoZeroes;
num PerVol_Based_Rate {PerVol_Based_Rate_NoZeroes}; 
read data CASUSER.BOXRATE
(where=(RateBasis="PerVolUOM" and Ratetype='Linehaul' and Rate>0)) 
into PerVol_Based_Rate_NoZeroes=[ORG DES BOX] PerVol_Based_Rate=Rate;
impvar PerVol_Based_Costs = sum {i in ISN, b in BOX: <Org_ISN[i],Des_ISN[i],b> in PerVol_Based_Rate_NoZeroes}
      PerVol_Based_Rate[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b];

set <str,str,str> PerWeight_Based_Rate_NoZeroes;
num PerWeight_Based_Rate {PerWeight_Based_Rate_NoZeroes}; 
read data CASUSER.BOXRATE
(where=(RateBasis="PerWtUOM" and Ratetype='Linehaul' and Rate>0)) 
into PerWeight_Based_Rate_NoZeroes=[ORG DES BOX] PerWeight_Based_Rate=Rate;
impvar PerWeight_Based_Costs = sum {i in ISN, b in BOX: <Org_ISN[i],Des_ISN[i],b> in PerWeight_Based_Rate_NoZeroes}
      PerWeight_Based_Rate[Org_ISN[i],Des_ISN[i],b] * Weight_ISN[i]*BoxesNeeded[i,b];
/*Define Implicit Variables - END */

Min TotalCost = PerBox_Based_Costs + PerVol_Based_Costs+PerWeight_Based_Costs;

/* Constraints - START */
   for {i in ISN, b in BOX: Is_BoxAvalable_for_a_lane[Org_ISN[i],Des_ISN[i],b] = 0}
      fix BoxesNeeded[i,b] = 0;

   con Volume_Constraint {i in ISN}:
      sum {b in BOX} Volume_Capacity[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b] >= Volume_ISN[i];

   con Weight_Constraint {i in ISN}:
      sum {b in BOX} Weight_Capacity[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b] >= Weight_ISN[i];
 
	con Volume_Constraint_MinThreshold {i in ISN}:
     sum {b in BOX} Volume_Min[Org_ISN[i],Des_ISN[i],b]*BoxesNeeded[i,b] <=Volume_ISN[i];

	con Weight_Constraint_MinThreshold {i in ISN}:
   sum {b in BOX} Weight_Min[Org_ISN[i],Des_ISN[i],b]*BoxesNeeded[i,b] <= Weight_ISN[i];

/* Constraints - END */	
expand;

solve with milp / decomp=(method=concomp);
  print BoxesNeeded;


/*Output Processing within OPTMODEL*/
    create data OptMix_RESULTS_Volume (where=(BoxesNeeded > 0.05)) from
      [ISN=i BOX=b]={i in ISN, b in BOX: <Org_ISN[i],Des_ISN[i],b> in PerVol_Based_Rate_NoZeroes}
      Org=ORG_ISN[i]
      Des=DES_ISN[i]
	  ShipmentVolume=Volume_ISN[i]
      ShipmentWeight=Weight_ISN[i]
      BoxesNeeded
      Volume_Capacity[Org_ISN[i],Des_ISN[i],b]
      Weight_Capacity[Org_ISN[i],Des_ISN[i],b]
 	  VolumeThresholdMinimum=Volume_Min[Org_ISN[i],Des_ISN[i],b]
	  WeightThresholdMinimum=Weight_Min[Org_ISN[i],Des_ISN[i],b]
      Costs=(PerVol_Based_Rate[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b])
	  DimsType='Vol'
      DimsUsed=(Volume_Capacity[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b])
   ;
  create data OptMix_RESULTS_Weight (where=(BoxesNeeded > 0.05)) from
      [ISN=i BOX=b]={i in ISN, b in BOX: <Org_ISN[i],Des_ISN[i],b> in PerWeight_Based_Rate_NoZeroes}
      Org=ORG_ISN[i]
      Des=DES_ISN[i]
	  ShipmentVolume=Volume_ISN[i]
      ShipmentWeight=Weight_ISN[i]
      BoxesNeeded
      Volume_Capacity[Org_ISN[i],Des_ISN[i],b]
      Weight_Capacity[Org_ISN[i],Des_ISN[i],b]
 	  VolumeThresholdMinimum=Volume_Min[Org_ISN[i],Des_ISN[i],b]
	  WeightThresholdMinimum=Weight_Min[Org_ISN[i],Des_ISN[i],b]
      Costs=(PerWeight_Based_Rate[Org_ISN[i],Des_ISN[i],b] * Weight_ISN[i]*BoxesNeeded[i,b])
	  DimsType='Wgt'
      DimsUsed=(Weight_Capacity[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b])
;
create data OptMix_RESULTS_box (where=(BoxesNeeded > 0.05)) from
      [ISN=i BOX=b]={i in ISN, b in BOX: <Org_ISN[i],Des_ISN[i],b> in PerBox_Based_Rate_NoZeroes}
      Org=ORG_ISN[i]
      Des=DES_ISN[i]
	  ShipmentVolume=Volume_ISN[i]
      ShipmentWeight=Weight_ISN[i]
      BoxesNeeded
      Volume_Capacity[Org_ISN[i],Des_ISN[i],b]
      Weight_Capacity[Org_ISN[i],Des_ISN[i],b]
	  VolumeThresholdMinimum=Volume_Min[Org_ISN[i],Des_ISN[i],b]
	  WeightThresholdMinimum=Weight_Min[Org_ISN[i],Des_ISN[i],b]
      Costs=(PerBox_Based_Rate[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b])
	  DimsType='Box'
      DimsUsed=(Volume_Capacity[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b])
   ;


I have two questions

 

When I ran the model, the model says 1X8T and 1X10T. The model says the total cost is $1050000. 

The cost of a 8T is $40 per WeightUOM and cost of 10T is $30 per WeightUOM. So the model takes $70*15000 Kgs = $1,050,000. 

I have 2 questions

(a) If I have correctly defined my Impvar PerWeight_Based_Costs. 

 impvar PerWeight_Based_Costs= sum {i in ISN, b in BOX: <Org_ISN[i],Des_ISN[i],b> in PerWeight_Based_Rate_NoZeroes} PerWeight_Based_Rate[Org_ISN[i],Des_ISN[i],b] * Weight_ISN[i]*BoxesNeeded[i,b];

When I expand i get  Impvar PerWeight_Based_Costs =

600000*BoxesNeeded[SHA_LAX_2,'8T'] + 450000*BoxesNeeded[SHA_LAX_2,'10T'] + 300000*                  
BoxesNeeded[SHA_LAX_2,'12T']                       

(b) In the Create Data Step, where I want to see how much Weight and Volume is being stuffed in each BOX, the DimsUsed (DimsUsed is WeightUsed in each box) is coming up as 8000 and 10000 for 8T and 10T that are just the capacities. What I really want is of the 15,000 Weight that the shipment is how much weight went into a 8T and how much went into a 10T. Then the total cost should be 8T_Weight*8T_Rate + 10T_Weight*10_Rate. But how do we know how much of a given shipment's weight and volume went into which container type. The Create data step needs to be modified. I am not sure how.

 

 

1 ACCEPTED SOLUTION

Accepted Solutions
RobPratt
SAS Super FREQ

OK, I think I understand what you want.  You cannot separately assign volume and weight for the same item.  I recommend introducing a new variable to represent the proportion of the item assigned to a box, along with implicit variables to represent the volume and weight:

   var BoxesNeeded {ISN,BOX} >= 0 integer;
   var Proportion {ISN,BOX} >= 0 <= 1;
   impvar VolumeInsideBox {i in ISN, b in BOX} = Volume_ISN[i] * Proportion[i,b];
   impvar WeightInsideBox {i in ISN, b in BOX} = Weight_ISN[i] * Proportion[i,b];

The implicit variables for costs are then as follows:

   impvar PerVol_Based_Costs = sum {i in ISN, b in BOX: <Org_ISN[i],Des_ISN[i],b> in PerVol_Based_Rate_NoZeroes}
      PerVol_Based_Rate[Org_ISN[i],Des_ISN[i],b] * VolumeInsideBox[i,b];
   impvar PerWeight_Based_Costs = sum {i in ISN, b in BOX: <Org_ISN[i],Des_ISN[i],b> in PerWeight_Based_Rate_NoZeroes}
      PerWeight_Based_Rate[Org_ISN[i],Des_ISN[i],b] * WeightInsideBox[i,b];

And the constraints are:

   /* Constraints - START */
   for {i in ISN, b in BOX: Is_BoxAvalable_for_a_lane[Org_ISN[i],Des_ISN[i],b] = 0}
      fix BoxesNeeded[i,b] = 0;

   con SumProportionToOne {i in ISN}:
      sum {b in BOX} Proportion[i,b] = 1;

   con Volume_Constraint {i in ISN, b in BOX}:
      Volume_Capacity[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b] >= VolumeInsideBox[i,b];

   con Weight_Constraint {i in ISN, b in BOX}:
      Weight_Capacity[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b] >= WeightInsideBox[i,b];

   con Volume_Constraint_MinThreshold {i in ISN, b in BOX}:
      Volume_Min[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b] <= VolumeInsideBox[i,b];

   con Weight_Constraint_MinThreshold {i in ISN, b in BOX}:
      Weight_Min[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b] <= WeightInsideBox[i,b];
   /* Constraints - END */ 

For your sample data, the resulting optimal solution has an objective value of 500,000 and uses 1x10T and 2x8T:

[1] [2] BoxesNeeded Proportion VolumeInsideBox WeightInsideBox
SHA_LAX_2 10T 1 0.66667 21.333 10000
SHA_LAX_2 12T 0 0.00000 0.000 0
SHA_LAX_2 20F 0 0.00000 0.000 0
SHA_LAX_2 40F 0 0.00000 0.000 0
SHA_LAX_2 40H 0 0.00000 0.000 0
SHA_LAX_2 45F 0 0.00000 0.000 0
SHA_LAX_2 8T 2 0.33333 10.667 5000
SHA_LAX_2 LCL 0 0.00000 0.000 0
SHA_LAX_2 Level0 0 0.00000 0.000 0
SHA_LAX_2 Level1 0 0.00000 0.000 0
SHA_LAX_2 Level2 0 0.00000 0.000 0

 

Your proposed solution of 1x10T and 1x12T would have violated the minimum volume threshold of 36 (> 32) for 12T.

View solution in original post

5 REPLIES 5
Santha
Pyrite | Level 9

Hi Rob

I was thinking of a solution to the problem that I am trying to solve. Basically, for a given shipment, there are 3 types of costs available

  1. BoxBased Costs
  2. Volume Based Costs
  3. Weight Based Costs

The decision variable that we have is Box type and how many of them for a given shipment , ie BoxesNeeded [i,b] where i is shipment and b is box type. All were fine till we had BOxBased Cost and LCL as the only PerVol based costs. But when i had weight based costs and the minimum threshold constraint, i was losing track. 

If you look at the dataset I sent earlier, it has only 1 shipment that has a volume of 32 and weight of 15000 kgs. the available boxes are 8T, 10T and 12T with a cost of $40 per kgs, $30 Per kgs and $20 per kgs respectively.  8T has a capacity of 8000 kgs, 10 T has a a capacity of 10000 kgs and 12T has 12000 Kgs . After this is the minimum threshold : 8T there is no minimum , 10T has a min of 2500 kgs and 12 T has a min of 4,200 kgs.  8T there is no minimum , 10T has a min of 21 cubic meter and 12 T has a min of 36 cubic meter. 

Want to solve for how many boxes of each type will be needed to solve this problem, meeting the constraints. Based on my hand calcluations, 1X12T and 1X10T seems to be the cheapest way to ship this. But i am not sure how to fix it and  so was I was thinking if we shd have another variable called Wt_inside_eachBox {ISN, BOX} as a decision variable

and have the impvar wt_based_costs = PetWtBasedRate * Wt_inside_eachBox.  Am not sure if I am on the right track. Feeling little lost. Can u help me? 

RobPratt
SAS Super FREQ

Yes, I think you will need another decision variable because the costs no longer depend on just the number of boxes used.  If I understand correctly, you will need to keep track of individual boxes of the same type.

 

But I don't quite understand what your Volume_Constraint_MinThreshold and Weight_Constraint_MinThreshold constraints are intended to enforce.  For example, can you please explain what "10T has a min of 2500 kgs" means?

Santha
Pyrite | Level 9

Rob

Ok. Let me clarify/elaborate. When I said "10T has a min of 2500 kgs" what i meant is that the BoxType 10T has a requirement that whenever it is used it is filled atleast 2,500 kgs. It is like a minimum allowable limit if using that BOX. Similarly, if we use a 12T the minimum Kgs that we need to ensure for a 12T is 4,200 Kgs. It can be more than these minimums for these box types but it should be atleast 2,500 kgs for 8T and atleast 4200 kgs for 12T. But for a 8T there is no minimum requirement at all. Similarly, 10T and 12T has a volume minimum of 21 and 36 Cubic meters respectively, while 8T does not have any.

 

Earlier we have got the model to work for BoxBased Cost and Vol Based Cost. The Weight Based cost is little different and so I am declaring a new decision variable called var Wt_inside_Box . I tried it, changed my "PerWeight_Based_Rate_NoZeroes" and also added the constraints for weight . Here is my code. The stuff that I have added are in GREEN. The one constraint that was working from earlier round is "Weight_Constraint_A". This is to make sure that the Capacity of the BOX is not exceeded. On the other hand the constraint "Weight_Constraint_B", I intend to have this enforce the minimum weight in a box is filled if the model picks that BOX type in the optimum answer. I tried different things but could not make it work.  Here is my code. The dataset is still the same from my first message in this thread. 

/* Decision Variable - START */
var BoxesNeeded {ISN,BOX}>=0 integer;
var Wt_inside_Box {ISN,BOX}>=0 integer; /*This need not be an integer but I can force my input to be an integer if need be*/
/* Decision Variable - END */

/*Define Rates and Implicit Variables - START 
set <str,str,str> PerBox_Based_Rate_NoZeroes;
num PerBox_Based_Rate {PerBox_Based_Rate_NoZeroes}; 
read data CASUSER.BOXRATE
(where=(RateBasis="PerBox" and Ratetype='Linehaul' and Rate>0)) 
into PerBox_Based_Rate_NoZeroes=[ORG DES BOX] PerBox_Based_Rate=Rate;
impvar PerBox_Based_Costs = sum {i in ISN, b in BOX: <Org_ISN[i],Des_ISN[i],b> in PerBox_Based_Rate_NoZeroes}
      PerBox_Based_Rate[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b];

set <str,str,str> PerVol_Based_Rate_NoZeroes;
num PerVol_Based_Rate {PerVol_Based_Rate_NoZeroes}; 
read data CASUSER.BOXRATE
(where=(RateBasis="PerVolUOM" and Ratetype='Linehaul' and Rate>0)) 
into PerVol_Based_Rate_NoZeroes=[ORG DES BOX] PerVol_Based_Rate=Rate;
impvar PerVol_Based_Costs = sum {i in ISN, b in BOX: <Org_ISN[i],Des_ISN[i],b> in PerVol_Based_Rate_NoZeroes}
      PerVol_Based_Rate[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b]; */

set <str,str,str> PerWeight_Based_Rate_NoZeroes;
num PerWeight_Based_Rate {PerWeight_Based_Rate_NoZeroes}; 
read data CASUSER.BOXRATE
(where=(RateBasis="PerWtUOM" and Ratetype='Linehaul' and Rate>0)) 
into PerWeight_Based_Rate_NoZeroes=[ORG DES BOX] PerWeight_Based_Rate=Rate;
impvar PerWeight_Based_Costs = sum {i in ISN, b in BOX: <Org_ISN[i],Des_ISN[i],b> in PerWeight_Based_Rate_NoZeroes}
      PerWeight_Based_Rate[Org_ISN[i],Des_ISN[i],b] * Wt_inside_Box[i,b];

/*Define Implicit Variables - END */

Min TotalCost = 
/*PerBox_Based_Costs + PerVol_Based_Costs+*/
PerWeight_Based_Costs;

/* Constraints - START */
   for {i in ISN, b in BOX: Is_BoxAvalable_for_a_lane[Org_ISN[i],Des_ISN[i],b] = 0}
      fix BoxesNeeded[i,b] = 0;

/*   con Volume_Constraint {i in ISN}:
      sum {b in BOX} Volume_Capacity[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b] >= Volume_ISN[i];

	con Volume_Constraint_MinThreshold {i in ISN}:
     sum {b in BOX} Volume_Min[Org_ISN[i],Des_ISN[i],b]*BoxesNeeded[i,b] <=Volume_ISN[i];
*/
 
	con Weight_Constraint_A {i in ISN}:
      sum {b in BOX} Weight_Capacity[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b] >= Weight_ISN[i];
 
   con Weight_Constraint_B {i in ISN, b in BOX: <Org_ISN[i],Des_ISN[i],b> in PerWeight_Based_Rate_NoZeroes}:
     Wt_inside_Box[i,b]* BoxesNeeded[i,b] >= BoxesNeeded[i,b]*Weight_Min[Org_ISN[i],Des_ISN[i],b]; 

/* Constraints - END */ solve with milp / decomp=(method=concomp); print BoxesNeeded; print Wt_inside_Box;

 

RobPratt
SAS Super FREQ

OK, I think I understand what you want.  You cannot separately assign volume and weight for the same item.  I recommend introducing a new variable to represent the proportion of the item assigned to a box, along with implicit variables to represent the volume and weight:

   var BoxesNeeded {ISN,BOX} >= 0 integer;
   var Proportion {ISN,BOX} >= 0 <= 1;
   impvar VolumeInsideBox {i in ISN, b in BOX} = Volume_ISN[i] * Proportion[i,b];
   impvar WeightInsideBox {i in ISN, b in BOX} = Weight_ISN[i] * Proportion[i,b];

The implicit variables for costs are then as follows:

   impvar PerVol_Based_Costs = sum {i in ISN, b in BOX: <Org_ISN[i],Des_ISN[i],b> in PerVol_Based_Rate_NoZeroes}
      PerVol_Based_Rate[Org_ISN[i],Des_ISN[i],b] * VolumeInsideBox[i,b];
   impvar PerWeight_Based_Costs = sum {i in ISN, b in BOX: <Org_ISN[i],Des_ISN[i],b> in PerWeight_Based_Rate_NoZeroes}
      PerWeight_Based_Rate[Org_ISN[i],Des_ISN[i],b] * WeightInsideBox[i,b];

And the constraints are:

   /* Constraints - START */
   for {i in ISN, b in BOX: Is_BoxAvalable_for_a_lane[Org_ISN[i],Des_ISN[i],b] = 0}
      fix BoxesNeeded[i,b] = 0;

   con SumProportionToOne {i in ISN}:
      sum {b in BOX} Proportion[i,b] = 1;

   con Volume_Constraint {i in ISN, b in BOX}:
      Volume_Capacity[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b] >= VolumeInsideBox[i,b];

   con Weight_Constraint {i in ISN, b in BOX}:
      Weight_Capacity[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b] >= WeightInsideBox[i,b];

   con Volume_Constraint_MinThreshold {i in ISN, b in BOX}:
      Volume_Min[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b] <= VolumeInsideBox[i,b];

   con Weight_Constraint_MinThreshold {i in ISN, b in BOX}:
      Weight_Min[Org_ISN[i],Des_ISN[i],b] * BoxesNeeded[i,b] <= WeightInsideBox[i,b];
   /* Constraints - END */ 

For your sample data, the resulting optimal solution has an objective value of 500,000 and uses 1x10T and 2x8T:

[1] [2] BoxesNeeded Proportion VolumeInsideBox WeightInsideBox
SHA_LAX_2 10T 1 0.66667 21.333 10000
SHA_LAX_2 12T 0 0.00000 0.000 0
SHA_LAX_2 20F 0 0.00000 0.000 0
SHA_LAX_2 40F 0 0.00000 0.000 0
SHA_LAX_2 40H 0 0.00000 0.000 0
SHA_LAX_2 45F 0 0.00000 0.000 0
SHA_LAX_2 8T 2 0.33333 10.667 5000
SHA_LAX_2 LCL 0 0.00000 0.000 0
SHA_LAX_2 Level0 0 0.00000 0.000 0
SHA_LAX_2 Level1 0 0.00000 0.000 0
SHA_LAX_2 Level2 0 0.00000 0.000 0

 

Your proposed solution of 1x10T and 1x12T would have violated the minimum volume threshold of 36 (> 32) for 12T.

Santha
Pyrite | Level 9

Hi Rob

I can't thank you enough for the suggestions. I ran the model and it worked. Am just doing spot checking a few shipments to see if it works. So far everything seems to good. I will doing more testing on monday. But I feel we have got it fully. Thanks a lot.

 

sas-innovate-2024.png

Available on demand!

Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.

 

Register now!

Multiple Linear Regression in SAS

Learn how to run multiple linear regression models with and without interactions, presented by SAS user Alex Chaplin.

Find more tutorials on the SAS Users YouTube channel.

Discussion stats
  • 5 replies
  • 813 views
  • 0 likes
  • 2 in conversation