This is an old revision of the document!
The map tool can perform an index mapping in which multiple elements of informant X are mapped to the same element of informant Y. To aggregate multiple elements into one, the map tool sums the values of the composite elements. However, there may be a need to use a different aggregation function such as minimum, maximum, or average.
The following example demonstrates how to implement this logic.
In this example, the a variable indexed by the informant unitID will be mapped to a variable indexed by the informant plantID. The contents of these informants are:
plantID[]: set version: 3 desc: localinformant plantID[] = create (; object=set, data="Plant1 Plant2") data: 2 elements ----------------------------------- 1 Plant1 2 Plant2 unitID[]: set version: 3 desc: localinformant unitID[] = create (; object=set, data="Unit1 Unit2 Unit3 Unit4 Unit5") data: 5 elements ----------------------------------- 1 Unit1 2 Unit2 3 Unit3 4 Unit4 5 Unit5
The desired mapping from unitID to plantID is:
Unit1 → Plant1
Unit2 → Plant2
Unit3 → Plant1
Unit4 → Plant1
Unit5 → Plant2
which is implemented by the following code:
local unitToPlantMap[uid] = create (; dataType=integer, dim=unitID, data="1 2 1 1 2")
! variable that contains commissioning years by unit id local unitComYr[uid] = create (; dim=unitID, data="1990 1975 1980 1995 2000") local pid[pid,pid] = diag (1.0; dim=plantID) local plantIDMask[uid,pid] = boolne (dimtran (pid[pid,pid]; map1=unitToPlantMap[uid], newDims=1, checkData=off),0) local unitComYrx[uid,pid] = unitComYr[uid] * plantIDMask[uid,pid] ! add offset to remove 0's before taking minimum local unitComYry[uid,pid] = booleq (unitComYrx[uid,pid],0) * 9999 + unitComYrx[uid,pid] ! variable that contains online date, which is the earliest commissioning year of the units that comprise the plant, by plant id local plantOnlineDate[pid] = coordmin (reorder (unitComYry[uid,pid]; plantID, unitID); numDims=1) table (plantOnlineDate[pid])