## Length in CREATE DATA

Solved
Regular Contributor
Posts: 185

# 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: 538

## 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.

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

## 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: 185

## Re: Length in CREATE DATA

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: 538

## 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'})``````

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

Regular Contributor
Posts: 185

## 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: 538

## Re: Length in CREATE DATA

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