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

将多年度多列合并的PROC SQL代码转换为SAS Data Step(含宏实现)

PROC SQL转SAS Data Step(宏实现)

需求说明

将原PROC SQL的多年度指标合并逻辑,转换为可支持6年数据、5-6列指标的SAS Data Step代码,通过宏实现批量处理,年度为预定义变量。

原逻辑回顾

原SQL通过多次UNION,对每个年度提取对应指标(做ROUND处理),过滤掉该年度所有指标均缺失的行,最终合并所有年度的结果。

宏实现代码

/* 预定义参数:年度变量名、年度显示值、指标列表 */
%let years = YEAR1 YEAR2 YEAR3 YEAR4 YEAR5 YEAR6;  /* 对应&YEAR1至&YEAR6,需与IN_DATA中的列后缀匹配 */
%let year_values = 201819 201920 202021 202122 202223 202324;  /* 每个年度的输出显示值 */
%let metrics = ANN_TURN ANN_PROF;  /* 可扩展至5-6个指标,比如添加ANN_ASSET ANN_LIAB等 */

/* 定义转换宏 */
%macro transpose_multi_year();
data SASUSER.OUT_DATA;
    set WORK.IN_DATA;
    /* 循环处理每个年度 */
    %do i = 1 %to %sysfunc(countw(&years));
        %let curr_year_var = %scan(&years, &i);
        %let curr_year_val = %scan(&year_values, &i);
        
        /* 标记当前年度是否有非缺失指标 */
        keep_row = 0;
        
        /* 提取并处理当前年度的所有指标 */
        %do j = 1 %to %sysfunc(countw(&metrics));
            %let curr_metric = %scan(&metrics, &j);
            /* 提取对应年度的指标列并做ROUND处理 */
            &curr_metric = round(&curr_metric&&curr_year_var);
            /* 若指标非缺失,标记保留该行 */
            if &curr_metric is not missing then keep_row = 1;
        %end;
        
        /* 若有至少一个非缺失指标,输出当前年度的记录 */
        if keep_row then do;
            YEAR = &curr_year_val;
            output;
        end;
    %end;
    
    /* 保留最终输出的字段 */
    keep YEAR ID &metrics;
run;
%mend transpose_multi_year();

/* 调用宏执行转换 */
%transpose_multi_year();

代码说明

  1. 参数配置:通过&years、&year_values、&metrics三个宏变量批量配置年度和指标,无需重复修改核心代码
  2. 循环处理:外层循环遍历每个年度,内层循环处理该年度的所有指标
  3. 缺失值过滤:通过keep_row标记判断当前年度是否有至少一个非缺失指标,仅输出符合条件的行
  4. 字段保留:最终仅保留输出所需的YEAR、ID及处理后的指标列

示例输出

针对提供的IN_DATA示例,运行后SASUSER.OUT_DATA的结果为:

IDYEARANN_TURNANN_PROF
120181910010
120192011012
120202112015

扩展方式

  • 新增年度:在&years和&year_values中追加对应年度的变量名和显示值即可(最多支持6年)
  • 新增指标:在&metrics中添加指标名称,宏会自动处理对应年度的指标列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:35:33