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
相关产品推荐
相关产品推荐

