Use AMPL .dat format files, it is possible to read a subset of pairs and an associated parameter from the same table. For example, with
set NUTR;
set FOOD;
set LINKS within {NUTR, FOOD};
param amt {LINKS} >= 0;
and data
set NUTR := A B1 B2 C ;
set FOOD := BEEF CHK FISH HAM MCH MTL SPG TUR ;
param :LINKS: amt (tr):
A C B1 B2 :=
BEEF 60 20 . 15
CHK . . 20 20
FISH . . 15 .
HAM 40 40 35 .
MCH 15 35 15 15
MTL 70 30 15 15
SPG 25 50 25 15
TUR 60 20 15 . ;
neither the values marked . or the corresponding members of LINKS are included in the data that is read:
ampl: display LINKS, amt;
set LINKS :=
(A,BEEF) (B2,CHK) (B1,HAM) (B2,MCH) (B2,MTL) (B2,SPG)
(C,BEEF) (B1,FISH) (A,MCH) (A,MTL) (A,SPG) (A,TUR)
(B2,BEEF) (A,HAM) (C,MCH) (C,MTL) (C,SPG) (C,TUR)
(B1,CHK) (C,HAM) (B1,MCH) (B1,MTL) (B1,SPG) (B1,TUR);
amt [*,*] (tr)
: A B1 B2 C :=
BEEF 60 . 15 20
CHK . 20 20 .
FISH . 15 . .
HAM 40 35 . 40
MCH 15 15 15 35
MTL 70 15 15 30
SPG 25 25 15 50
TUR 60 15 . 20
;
Reading from spreadsheet data should work the same, with the role of . played by a blank cell. But currently the entire set {NUTR,FOOD} is read rather than just the pairs corresponding to cells that are non-blank. In this example, reading

with table definition
table dietAmts IN "amplxl" "dietIssue.xlsx" "Amounts" "2D":
LINKS <- [NUTR, FOOD], amt;
gives the same values but the wrong LINKS set:
display LINKS, amt;
set LINKS :=
(A,BEEF) (B2,CHK) (A,HAM) (B2,MCH) (A,SPG) (B2,TUR)
(B1,BEEF) (C,CHK) (B1,HAM) (C,MCH) (B1,SPG) (C,TUR)
(B2,BEEF) (A,FISH) (B2,HAM) (A,MTL) (B2,SPG)
(C,BEEF) (B1,FISH) (C,HAM) (B1,MTL) (C,SPG)
(A,CHK) (B2,FISH) (A,MCH) (B2,MTL) (A,TUR)
(B1,CHK) (C,FISH) (B1,MCH) (C,MTL) (B1,TUR);
amt [*,*] (tr)
: A B1 B2 C :=
BEEF 60 . 15 20
CHK . 20 20 .
FISH . 15 . .
HAM 40 35 . 40
MCH 15 15 15 35
MTL 70 15 15 30
SPG 25 25 15 50
TUR 60 15 . 20
;
Use AMPL .dat format files, it is possible to read a subset of pairs and an associated parameter from the same table. For example, with
and data
neither the values marked
.or the corresponding members of LINKS are included in the data that is read:Reading from spreadsheet data should work the same, with the role of
.played by a blank cell. But currently the entire set{NUTR,FOOD}is read rather than just the pairs corresponding to cells that are non-blank. In this example, readingwith table definition
gives the same values but the wrong LINKS set: