调整SAS数据集结构:将宽表转换为含颜色与数值的长表
SAS宽表转长表解决方案
直接用数组配合单循环就能实现宽表到长表的转换,修正后的代码如下:
data Dataset1new; set Dataset1; /* 定义数组包含所有颜色列,*让SAS自动计算元素数量 */ array colors[*] Black Gray Red White; /* 遍历数组每个元素 */ do i = 1 to dim(colors); Color = vname(colors[i]); /* 获取当前数组元素的变量名作为颜色值 */ Number = colors[i]; /* 获取当前数组元素的数值 */ output; /* 输出当前行到新数据集 */ end; /* 丢弃不需要的变量 */ drop i Black Gray Red White; run;
关键说明:
- 去掉了多余的
input语句:原数据集已有数据,无需重新输入 - 用
array定义颜色列集合:把所有需要转换的列放进数组,简化循环逻辑 - 单循环替代双重循环:只需遍历数组的每个元素,无需行/列双重循环
- 必须加
output:每次循环生成一条新记录,不加的话只会输出最后一次循环的结果 dim(colors)自动获取数组长度:不用手动写元素个数,后续增减颜色列时无需修改循环条件
内容的提问来源于stack exchange,提问作者Bunny Ben
相关产品推荐
相关产品推荐

