Operations Research topics: SAS/OR,
SAS Optimization, and SAS Simulation Studio

Length in CREATE DATA

Accepted Solution Solved
Reply
Regular Contributor
Posts: 181
Accepted Solution

Length in CREATE DATA

Is there any way we can change length of the variable created with CREATE DATA statement? I have a text variable which is used as a key variable in PROC OPTMODEL but it gets truncated in the data which is created with CREATE DATA statement. I am new to PROC OPTMODEL. Could you also please give a example of how OR condition is used in constraint? For example, sum {c in customers} (product[c] IN ('A', 'B'))


Accepted Solutions
Solution
‎12-03-2016 12:33 PM
SAS Employee
Posts: 417

Re: Length in CREATE DATA

The CREATE DATA statement has a LENGTH= option:

http://go.documentation.sas.com/#!/?docsetId=ormpug&docsetVersion=14.2&docsetTarget=ormpug_optmodel_...

 

Correct syntax for your sum is:

sum {c in customers: product[c] IN {'A', 'B'}}

For new users of PROC OPTMODEL, I recommend this book of examples.

View solution in original post


All Replies
Solution
‎12-03-2016 12:33 PM
SAS Employee
Posts: 417

Re: Length in CREATE DATA

The CREATE DATA statement has a LENGTH= option:

http://go.documentation.sas.com/#!/?docsetId=ormpug&docsetVersion=14.2&docsetTarget=ormpug_optmodel_...

 

Correct syntax for your sum is:

sum {c in customers: product[c] IN {'A', 'B'}}

For new users of PROC OPTMODEL, I recommend this book of examples.

Regular Contributor
Posts: 181

Re: Length in CREATE DATA

Thanks @RobPratt for your reply. Very much appreciated!

Is sum {c in customers: product[c] IN {'A', 'B'}} equivalent to  sum {c in customers} (product[c] IN {'A', 'B'})? I get confused with ':' symbol. Does it represent AND condition? Many times i see ':' is not required to apply AND condition.

SAS Employee
Posts: 417

Re: Length in CREATE DATA

[ Edited ]

The colon : operator (which you can think of as "such that") allows you to select a subset based on a logical expression:

http://go.documentation.sas.com/#!/?docsetId=ormpug&docsetVersion=14.2&docsetTarget=ormpug_optmodel_...

 

The following expressions are all equivalent and count the number of customers whose product is A or B:

sum {c in customers} (product[c] IN {'A', 'B'})
sum {c in customers} (if product[c] IN {'A', 'B'} then 1 else 0)
sum {c in customers} (if product[c] IN {'A', 'B'} then 1)
sum {c in customers: product[c] IN {'A', 'B'}} 1
card({c in customers: product[c] IN {'A', 'B'})

See also my reply here, which is similar:

https://communities.sas.com/t5/Mathematical-Optimization/Optimize-Traveling-Distance/td-p/308817/pag...

 

Regular Contributor
Posts: 181

Re: Length in CREATE DATA

Thanks @RobPratt. You have been very helpful. I've made a good progress in learning PROC OPTMODEL and credit goes to you for providing links and clarifying doubts with examples.

 

Last question - Why do we need to write 1 in the following statement?

 

sum {c in customers: product[c] IN {'A', 'B'}} 1

Can't we simple write (without 1) -

 

sum {c in customers: product[c] IN {'A', 'B'}}

I remember you provided the similar solution wherein you mentioned 1 before dividing by 3-

ceil(sum {c in customers: sales[c] > 50} 1 / 3)

 

 

SAS Employee
Posts: 417

Re: Length in CREATE DATA

Glad to help. The 1 is there because the SUM operator requires a summand.
☑ This topic is SOLVED.

Need further help from the community? Please ask a new question.

Discussion stats
  • 5 replies
  • 211 views
  • 1 like
  • 2 in conversation