SAS Optimization, and SAS Simulation Studio

turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

Find a Community

Topic Options

- RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page

- Mark as New
- Bookmark
- Subscribe
- RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

12-02-2016 01:25 PM

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

- Mark as New
- Bookmark
- Subscribe
- RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

Posted in reply to Ujjawal

12-02-2016 01:58 PM

The CREATE DATA statement has a LENGTH= option:

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

- Mark as New
- Bookmark
- Subscribe
- RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

Posted in reply to Ujjawal

12-02-2016 01:58 PM

The CREATE DATA statement has a LENGTH= option:

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.

- Mark as New
- Bookmark
- Subscribe
- RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

Posted in reply to RobPratt

12-03-2016 09:55 AM

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.

- Mark as New
- Bookmark
- Subscribe
- RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

Posted in reply to Ujjawal

12-03-2016 11:46 AM - edited 12-03-2016 11:47 AM

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

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:

- Mark as New
- Bookmark
- Subscribe
- RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

Posted in reply to RobPratt

12-03-2016 12:39 PM

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)
```

- Mark as New
- Bookmark
- Subscribe
- RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

Posted in reply to Ujjawal

12-03-2016 04:11 PM

Glad to help. The 1 is there because the SUM operator requires a summand.