如何在SAS中将长格式数据转换为宽格式数据(附示例)
解决方案:将SAS长格式数据集转换为宽格式
针对你提供的长格式数据集,这里提供两种常用的转换方法:
方法一:使用PROC TRANSPOSE
这是SAS中转换宽长格式最便捷的工具,尤其适合这类有固定分组的场景:
/* 分别将arm、var1、var2按subject和day分组转成宽格式 */ proc transpose data=have out=trans_arm prefix=arm_; by subject day; id arm; var arm; run; proc transpose data=have out=trans_var1 prefix=var1_; by subject day; id arm; var var1; run; proc transpose data=have out=trans_var2 prefix=var2_; by subject day; id arm; var var2; run; /* 合并三个转置后的数据集,得到最终宽格式 */ data want; merge trans_arm trans_var1 trans_var2; by subject day; drop _NAME_; /* 删除转置自动生成的冗余列 */ run;
方法二:使用DATA步直接合并
如果熟悉DATA步的分组处理逻辑,可直接通过按subject和day分组读取两行数据构建宽格式,效率更高:
data want; set have; by subject day; /* 读取第一行(left组)数据,暂存到临时变量 */ if first.day then do; arm_left = arm; var1_left = var1; var2_left = var2; end; /* 读取第二行(right组)数据,赋值后输出整行 */ if last.day then do; arm_right = arm; var1_right = var1; var2_right = var2; output; end; /* 保留需要的变量 */ keep subject day arm_left arm_right var1_left var1_right var2_left var2_right; run;
两种方法都能生成你预期的宽格式数据集,DATA步方法更适合大数据量场景,PROC TRANSPOSE则在变量较多时更灵活。
内容的提问来源于stack exchange,提问作者MNU
相关产品推荐
相关产品推荐

