GAMS - запись вывода в файл Excel с использованием GDX

Я занимаюсь экспортом данных из GAMS, чтобы добиться успеха. Поэтому я использую утилиты GDX.

Скажем, у меня есть две переменные, x и y, определенные для набора i. Множество i = {1,2,3,4}. Таким образом, x (i) и y (i) имеют по четыре точки данных.

Сначала я выгружаю вывод в файл GDX:

execute_unload "output_ex.gdx"
x
y   
;

После этого я записываю уровни переменных в файл Excel. В настоящее время я пишу это как

execute 'gdxxrw.exe Output.gdx par=XXX rng=XXX   !a1'

execute 'gdxxrw.exe output_ex.gdx par=x rng=x!a1'
execute 'gdxxrw.exe output_ex.gdx par=y rng=y!a1'

Это создает файл Excel с 2 листами, x и y, каждый из которых содержит 4 значения x и y, начиная с ячейки a1, с установленными индексами (i = 1..4) в первом столбце. Вместо этого я хотел бы иметь один лист. Этого можно добиться, скажем

execute 'gdxxrw.exe Output.gdx par=XXX rng=XXX   !a1'

execute 'gdxxrw.exe output_ex.gdx par=x rng=x!a1'
execute 'gdxxrw.exe output_ex.gdx par=y rng=x!a3'

Здесь я получаю x и y на одном листе с названием x. Однако проблема в том, что индексы повторяются, т.е. индекс создается в двух экземплярах в ячейке a3, поэтому у меня есть отдельная строка с теми же индексами для x и y. Есть ли способ иметь индекс только в первой строке и последующих строках, содержащих только данные, идентифицированные именами переменных? Это сделало бы его эстетически более приятным, и им было бы легче манипулировать.

Большое спасибо!


person Kwame Brown    schedule 11.01.2021    source источник


Ответы (1)


Вы можете объединить два параметра в один в GAMS уже перед его экспортом, например:

Set i      / i1*i4 /
    header / x,y /;
    
Parameter
    x(i)
    y(i)
    xy(i, header);
    
* Fill with random data
x(i) = uniformInt(2,6);
y(i) = uniformInt(4,7);

* Combine in one parameter
xy(i,'x') = x(i);
xy(i,'y') = y(i);

execute_unload "output_ex.gdx" xy;
execute 'gdxxrw.exe output_ex.gdx par=xy rng=xy!a1'
person Lutz    schedule 12.01.2021