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

如何用SAS Proc JSON生成通用灵活的多层级有效JSON?

通用灵活的SAS复杂JSON生成方案

方案1:数据步结合JSON内置函数动态构建

利用SAS 9.4及以上版本提供的JSONOBJECT()、JSONARRAY()、JSONAPPEND()等函数,可以完全动态地构建嵌套JSON结构,无需提前知晓origin字段的所有取值。

步骤示例:

  • 先对数据集按origin排序,确保同组数据连续:
proc sort data=your_dataset out=sorted_data;
    by origin;
run;
  • 在数据步中动态分组构建JSON:
data _null_;
    set sorted_data end=eof;
    by origin;
    retain origin_array main_json;
    
    * 构建单条记录的JSON对象;
    record_json = jsonobject(
        'id' => id,
        'value' => value,
        'details' => jsonobject('date' => record_date, 'status' => status)
    );
    
    * 进入新origin组时,初始化该组的数组;
    if first.origin then do;
        origin_array = jsonarray();
    end;
    
    * 将当前记录加入组数组;
    origin_array = jsonappend(origin_array, record_json);
    
    * 离开当前origin组时,将组数组加入主JSON对象;
    if last.origin then do;
        main_json = jsonobject(main_json, origin => origin_array);
    end;
    
    * 处理完所有数据后,输出最终JSON并验证有效性;
    if eof then do;
        file '/path/to/output.json' lrecl=32767;
        put jsonformat(main_json, pretty);
        
        * 验证JSON有效性(可选);
        proc json out=_null_ pretty validate;
            put main_json;
        run;
    end;
run;

这种方法自动识别所有origin取值,无需手动枚举,且通过SAS内置JSON函数保证结构合法。

方案2:宏程序自动生成PROC JSON代码

如果更习惯使用PROC JSON,可以通过宏程序自动获取origin的所有唯一值,动态生成分组语句,避免手动枚举:

* 获取origin的所有唯一值并存储到宏变量;
proc sql noprint;
    select distinct quote(trim(origin)) into :origin_list separated by ' '
    from your_dataset;
quit;

* 动态生成PROC JSON代码;
proc json out='/path/to/output.json' pretty validate;
    write open object;
    %do i=1 %to &sqlobs;
        %let current_origin = %scan(&origin_list, &i);
        write key &current_origin;
        write open array;
            set your_dataset(where=(origin = &current_origin));
            write open object;
                write key 'id' value id;
                write key 'value' value value;
                write key 'details';
                write open object;
                    write key 'date' value record_date;
                    write key 'status' value status;
                write close;
            write close;
        write close;
    %end;
    write close;
run;

该方案通过PROC SQL自动抓取所有origin取值,再用宏循环生成对应分组的PROC JSON代码,既保留了PROC JSON的合法性保障,又实现了动态适配。

关键优势

  • 无需提前知晓origin的所有可能取值,完全自动识别
  • 两种方案均通过SAS官方工具/函数生成JSON,天然保证结构有效性
  • 支持任意复杂的嵌套结构,可根据需求调整JSON对象/数组的层级

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:54:50