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

SAS实现类似Pandas concat的多数据集纵向堆叠方法咨询

SAS实现类似Pandas concat的多数据集纵向堆叠方法咨询

嗨,我来帮你搞定这个问题!在SAS里要实现和Python中pd.concat([data1, data2, ..., dataN])一样的纵向堆叠同结构数据集的需求,有几种实用的方法,我给你慢慢道来:

方法一:数据步使用SET语句(最常用的基础写法)

这应该是最直接对应pandas concat的写法啦,只要把你要拼接的所有数据集列在SET关键字后面就行——前提是这些数据集的列名、数据类型完全一致,SAS会自动把它们按行堆叠起来。

示例代码:

data combined_data;
    set data1 data2 data3 ... dataN; /* 把所有要拼接的数据集列在这里 */
run;

要是你的数据集是按规律命名的(比如都是data开头,从data1到data10),还能用上通配符省事儿,直接写成:

data combined_data;
    set data:; /* 冒号表示匹配所有以data开头的数据集 */
run;

这种写法特别适合数据集数量多的情况,不用一个个列出来!

方法二:使用PROC APPEND(大数据集优先选这个)

如果你的数据集特别大,用PROC APPEND会更高效——它不需要把所有数据集都加载到内存里,而是直接把后续数据集追加到目标数据集的末尾,能省不少内存资源。

基础写法(逐个追加)

/* 先初始化一个空的目标数据集,或者直接用已有的第一个数据集当基础 */
proc append base=combined_data data=data1;
run;
proc append base=combined_data data=data2;
run;
/* 依次追加剩下的data3到dataN即可 */

宏循环批量追加(数据集数量多时用)

要是数据集数量太多,一个个写proc append太麻烦,咱们可以用SAS宏来批量处理:

%macro append_all;
    /* 先创建一个空的目标数据集,只保留结构不取数据 */
    data combined_data;
        set data1(obs=0); /* obs=0表示只复制数据集结构,不加载数据 */
    run;
    /* 循环遍历所有数据集,逐个追加 */
    %do i=1 %to 10; /* 这里的10换成你实际的数据集数量,比如N的值 */
        proc append base=combined_data data=data&i;
        run;
    %end;
%mend;
%append_all;

两种方法怎么选?

  • 如果你数据集数量不多,或者需要在拼接的时候顺便做些数据处理(比如新增列、过滤不符合条件的行),选SET语句就好,代码简洁又灵活。
  • 要是处理的是超大数据集,追求内存效率,那PROC APPEND绝对是更好的选择,不过它在数据处理的灵活性上不如数据步。

备注:内容来源于stack exchange,提问作者Ottpocket

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 11:45:30