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

How do I define a new set from other sets in optmodel

Accepted Solution Solved
Reply
Occasional Contributor
Posts: 9
Accepted Solution

How do I define a new set from other sets in optmodel

Hello,

 

I got a problem with set defining since I am a beginner and I appreciate if somebody helps me here.

 

I have a data set as below

Rank

Person1

Next_person

Money

1

A

B

100

1

A

B

120

2

A

B

120

1

B

C

110

1

B

C

120

2

B

C

120

 

 

I am skiping rest of the table here.

 

First column is rank of the person, second column is the person and the third column is the person next to person1. The last column shows the money person1 s. I already define this set in my optmodel:

 

set<num, str, num> rank_per_mny;

rank_per_mny = [Rank Person1 Money]

 

Then I need to have kind of a product of this set with itself to give me a set as :

{Rank,Person1,Money(for person1),Money(for Next_person)}

 

Basically, I want to add the next_person money to the previous set (for the same rank) and I think it is a product between this set and itself. For this example the set I need will be this:

{1,A,100,110}, {1,A,100,120}, , {1,A,120,110}, , {1,A,100,120}, , {2,A,120,120},

 

I wrote the followingcode but I it does not get the correct values. Like it should start the Money for next_person from 110 but it starts from 100 again. I appreciate your help.

 

proc optmodel;

 

set<num, str, num> rank_per_mny;

rank_per_mny = [Rank Person1 Money];

set<num, str,str, num> rank_per_mny_mny;

rank_per_mny_mny = [Rank Person1 Next_person Money];

set< number> money;

set< num, str, num > assign;

set< num, str, num,number> cross;

 

 

for {< Rank, Person1, Next_person, Money > in rank_per_mny_mny }

money = setof{< Rank Next_person Money > in rank_per_mny } Money ;

assign = setof{< Rank Person1 Money > in rank_per_mny }{<Rank Person1 Money>;

cross = cross union (assign cross price);

 

Thank you!


Accepted Solutions
Solution
‎12-09-2016 02:55 PM
SAS Employee
Posts: 448

Re: How do I define a new set from other sets in optmodel

data data1;
   input person $ next $;
   datalines;
A B
B C
;

data data2;
   input Rank Person1 $ Money;
   datalines;
1 A 100
1 A 120
2 A 120
1 B 110
1 B 120
2 B 120
;

proc optmodel;
   set <str> PEOPLE;
   str next {PEOPLE};
   read data data1 into PEOPLE=[person] next;

   set<num, str, num> rank_per_mny;
   read data data2 into rank_per_mny = [Rank Person1 Money];

   put (setof {<r,p,m> in rank_per_mny, <(r),next[p],m2> in rank_per_mny} <r,p,m,m2>)=;
quit;

View solution in original post


All Replies
Solution
‎12-09-2016 02:55 PM
SAS Employee
Posts: 448

Re: How do I define a new set from other sets in optmodel

data data1;
   input person $ next $;
   datalines;
A B
B C
;

data data2;
   input Rank Person1 $ Money;
   datalines;
1 A 100
1 A 120
2 A 120
1 B 110
1 B 120
2 B 120
;

proc optmodel;
   set <str> PEOPLE;
   str next {PEOPLE};
   read data data1 into PEOPLE=[person] next;

   set<num, str, num> rank_per_mny;
   read data data2 into rank_per_mny = [Rank Person1 Money];

   put (setof {<r,p,m> in rank_per_mny, <(r),next[p],m2> in rank_per_mny} <r,p,m,m2>)=;
quit;
Occasional Contributor
Posts: 9

Re: How do I define a new set from other sets in optmodel

Thank you so much! It is interesting, so it seems next[p] gives us the person in column "next" in data1 who is in the same raw as observation p in data2?

 

 

SAS Employee
Posts: 448

Re: How do I define a new set from other sets in optmodel

yes

Occasional Contributor
Posts: 9

Re: How do I define a new set from other sets in optmodel

Ok I got the idea. Thanks, It was very helpful!

☑ This topic is solved.

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

Discussion stats
  • 4 replies
  • 200 views
  • 0 likes
  • 2 in conversation