You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GAMS中生成由年份集与季度集拼接而成的集合?

在GAMS中实现年份与季度集合元素的拼接生成新集合

需求说明

需要创建新集合T,其元素为年份集合TY元素与季度集合TQ元素的拼接结果,覆盖两者的所有笛卡尔积组合(例如2019Q1、2019Q2……2040Q4)。已知基础集合定义如下:

SET TY /2019*2040/;
SET TQ /Q1*Q4/;

实现方法

方法1:简洁的集合直接定义(推荐)

利用GAMS的字符串拼接运算符//和集合遍历语法,直接基于笛卡尔积生成目标集合:

SET TY /2019*2040/;
SET TQ /Q1*Q4/;

* 生成关联原TY、TQ的二维集合
SET T(TY,TQ) / [y,q] : y.tl // q.tl /;

* 若需生成独立的一维集合
SET T_flat / [y,q] : y.tl // q.tl /;
  • y.tl和q.tl分别获取集合元素的文本标签
  • //是GAMS的字符串拼接操作符
  • [y,q]表示遍历TY和TQ的所有组合,自动生成所有拼接后的元素

方法2:循环遍历生成(对应Stata的foreach逻辑)

如果更习惯循环写法,可以通过嵌套LOOP逐个添加元素:

SET TY /2019*2040/;
SET TQ /Q1*Q4/;

* 初始化空集合
SET T / /;

* 嵌套循环遍历年份和季度,拼接后添加到集合T
LOOP(TY(y),
    LOOP(TQ(q),
        T(y.tl // q.tl) = YES;
    );
);

* 可选:显示生成的集合结果
DISPLAY T;

补充说明

如果需要截取元素的前N个字符(例如年份元素不是4位的场景),可以使用SUBSTR函数:

* 示例:取年份前4位、季度前2位拼接
SET T / [y,q] : SUBSTR(y.tl,1,4) // SUBSTR(q.tl,1,2) /;

内容的提问来源于stack exchange,提问作者Daniela Gallo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 05:20:09