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

如何用SAS PROC JSON将数据集维度列转为对象内数组导出?

解决SAS按ID分组导出JSON并将维度列转为数组的问题

要实现按id分组,把同一id下的dimension值整合成JSON数组嵌入对应对象,你可以直接在PROC JSON中结合SAS的BY组处理来完成,不需要额外预处理数据集(当然先排序是必须的)。下面是具体步骤:

步骤1:先对数据集按id和amount排序

因为要按id分组处理,首先需要确保数据集是按id有序的:

proc sort data=test;
    by id amount;
run;

步骤2:使用PROC JSON结合BY组生成目标JSON结构

利用PROC JSON的底层语句(open array、open object、write等),配合BY组的first.id和last.id标记来控制JSON的嵌套结构:

proc json out='/MYPATH/jsontest.json' pretty nosastags;
    /* 打开外层的JSON数组 */
    open array;

    set test;
    by id amount;

    /* 当遇到每个id的第一条记录时,创建新的JSON对象并写入id和amount */
    if first.id then do;
        open object;
        write key 'id' value id;
        write key 'amount' value amount;
        /* 打开dimensions对应的数组 */
        write key 'dimensions';
        open array;
    end;

    /* 将当前行的dimension值写入数组 */
    write value dimension;

    /* 当遇到每个id的最后一条记录时,关闭数组和当前对象 */
    if last.id then do;
        close array;
        close object;
    end;

    /* 关闭外层数组 */
    close array;
run;

效果验证

执行上述代码后,导出的JSON会和你期望的结构完全一致:

[
  {
    "id": "1",
    "amount": "x",
    "dimensions": [
      "A",
      "B",
      "C"
    ]
  },
  {
    "id": "2",
    "amount": "y",
    "dimensions": [
      "A",
      "X"
    ]
  },
  {
    "id": "3",
    "amount": "z",
    "dimensions": [
      "C",
      "K",
      "X"
    ]
  }
]

补充说明

  • 这里依赖first.id和last.id来识别每个分组的起始和结束,所以排序步骤不能省略;
  • pretty参数让输出的JSON格式化更易读,nosastags避免SAS自动添加额外的元数据标签;
  • 如果你的SAS版本支持(9.4M6及以上),也可以先通过PROC SQL的STRING_AGG函数将同一id的dimension合并为逗号分隔字符串,再用PROC JSON的相关选项转换为JSON数组,但上面的方法更直接且兼容性更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:33:36