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

如何在SAS中基于政策规则表生成指定格式的JSON字符串

SAS 政策规则JSON生成宏实现方案

常见疑问解答

  • 拼接函数选择:使用cats()更合适,它会自动去除前后空格、无分隔拼接所有入参,正好适配引号、键名、键值的拼接需求;catx()需要指定固定分隔符,不适用于本场景。
  • 是否需要substr():必须使用。每次拼接单条规则后会额外追加逗号作为对象分隔符,最后一条规则末尾的逗号属于非法字符,需要用substr()截取删除。
  • 循环设置:不要硬编码循环上限,通过proc sql动态读取筛选后的规则总数控制循环次数,可适配任意数量的规则输入。

完整可运行宏代码

%let PolicyString = (602,610,639);
%macro json;
    /* 1. 按指定规则编号筛选数据 */
    data work.testtable (replace=yes);
        set work.policytable;
        where rulenumber in &PolicyString;
    run;

    /* 2. 读取规则总数和所有规则字段到宏变量,供后续循环使用 */
    proc sql noprint;
        /* 读取筛选后的规则总条数 */
        select count(*) into :rule_cnt from work.testtable;
        /* 按索引存储每条规则的编号、描述、决策结果 */
        select 
            rulenumber, 
            rulelongdesc, 
            decision 
        into 
            :rn1-:rn&rule_cnt, 
            :rd1-:rd&rule_cnt, 
            :dc1-:dc&rule_cnt 
        from work.testtable;
    quit;

    /* 3. 初始化存储两类决策JSON的宏变量 */
    %local i decline_str review_str rule_obj;
    %let decline_str = ;
    %let review_str = ;

    /* 4. 循环遍历所有规则拼接JSON对象 */
    %do i = 1 %to &rule_cnt;
        /* 拼接单条规则的JSON对象,末尾加逗号作为分隔 */
        %let rule_obj = {"RuleNumber":"&&rn&i","RuleText":"&&rd&i"},;

        /* 按决策类型拼接到对应字符串 */
        %if &&dc&i = Decline %then %do;
            %let decline_str = &decline_str.&rule_obj;
        %end;
        %else %if &&dc&i = Review %then %do;
            %let review_str = &review_str.&rule_obj;
        %end;
    %end;

    /* 5. 处理末尾多余逗号,拼接为合法JSON数组 */
    * 处理拒绝类JSON;
    %if %length(&decline_str) > 0 %then %do;
        %let decline_str = [%substr(&decline_str, 1, %length(&decline_str)-1)];
    %end;
    %else %do;
        %let decline_str = [];
    %end;

    * 处理复核类JSON;
    %if %length(&review_str) > 0 %then %do;
        %let review_str = [%substr(&review_str, 1, %length(&review_str)-1)];
    %end;
    %else %do;
        %let review_str = [];
    %end;

    /* 6. 输出最终JSON字符串 */
    %put #################### 输出结果 ####################;
    %put Decline规则JSON: &decline_str;
    %put Review规则JSON: &review_str;
    %put ##################################################;
%mend;

%json;

输出结果示例

运行宏后日志会输出如下内容:

#################### 输出结果 ####################
Decline规则JSON: [{"RuleNumber":"602","RuleText":"Age < 18"},{"RuleNumber":"639","RuleText":"Unknown address"}]
Review规则JSON: [{"RuleNumber":"610","RuleText":"False Application"}]
##################################################

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:45:03