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

如何在SAS中用数组实现数据转置(禁止使用PROC TRANSPOSE)

使用SAS DO ARRAY实现宽表转长表(替代PROC TRANSPOSE)

需求说明

将如下宽格式数据集:

col     col2  a   b   c   d
001      A    1   3   5   7
002      B    2   4   6   8

转换为指定的长格式数据集,要求使用DO ARRAY实现,禁止使用PROC TRANSPOSE:

col  col2  col_new 

001    A    1
001    A    3
001    A    5
001    A    7
002    B    2
002    B    4
002    B    6
002    B    8

实现代码

假设原宽表名为wide,生成的长表名为long,代码如下:

data long;
    set wide;
    /* 定义数组,包含需要转置的变量a、b、c、d */
    array trans_vars[*] a b c d;
    /* 遍历数组中所有元素 */
    do idx = 1 to dim(trans_vars);
        col_new = trans_vars[idx];
        /* 输出当前行,生成对应长表记录 */
        output;
    end;
    /* 删除不需要的原变量和循环控制变量 */
    drop a b c d idx;
run;

代码解释

  • 数组定义:array trans_vars[*] a b c d; 创建数组trans_vars,包含需要转置的4个变量,[*]让SAS自动识别数组元素数量,无需手动指定长度。
  • 循环遍历:do idx = 1 to dim(trans_vars); 通过dim()函数获取数组长度(此处为4),循环4次处理每个变量。
  • 赋值与输出:每次循环将数组当前元素的值赋值给col_new,执行output;输出一行记录,实现宽表到长表的行拆分。
  • 清理变量:drop语句移除原数组变量和循环变量idx,仅保留目标字段col、col2、col_new。

效果验证

运行代码后,原数据中的每一行会生成4条长表记录,最终得到8行目标数据,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:25:03