如何在SAS中使用数组,及借助SAS数组完成数据计算操作
SAS数组使用及计算操作指南
1. SAS中数组的基础使用方法
SAS数组是一组同类型变量的集合,核心作用是批量处理同类型变量,无需重复编写多变量操作代码。
基础语法
ARRAY 数组名[下标规则] <$> <变量列表> <初始值>;
各参数说明:
- 数组名:自定义名称,不能和当前数据步的其他变量重名
- 下标规则:可以直接写元素个数,比如
[10]代表数组包含10个元素,也可以写[*]让SAS自动根据变量列表统计元素数量 - $:可选参数,仅当数组存储的是字符型变量时添加
- 变量列表:要纳入数组管理的同类型变量,支持短横线缩写格式,比如
ans1-ans10代表ans1到ans10共10个变量
结合示例数据的数组定义示例
首先读取示例学生答题源数据:
/* 导入示例学生答题数据 */ data scholar; input name $ ans1 $ ans2 $ ans3 $ ans4 $ ans5 $ ans6 $ ans7 $ ans8 $ ans9 $ ans10 $; datalines; Anne C A C D B E D D B A Vicky C C C E B E D B A Laurel D D C D B E D D B A Victor C A C D B E D D A D Dimple C A C D B E D D B A Godfrey B D C B D D D B B A Denny C D C B E E D B B A Richard C A C D B E D D B A ; run;
将10道题的答案变量定义为字符型数组:
/* 定义答案数组,*代表自动统计元素个数,$标识为字符型 */ array ans[*] $ ans1-ans10;
2. 通过SAS数组完成计算操作
数组最常用的场景就是批量遍历变量完成计算,以下结合示例数据给出两种常见的计算场景实现。
场景1:批量计算学生答题总分
假设评分规则为:A=5分、B=4分、C=3分、D=2分、E=1分,遍历数组计算每个学生的总分:
data scholar_total; set scholar; /* 定义答案数组 */ array ans[*] ans1-ans10; total = 0; /* 用dim函数获取数组长度,后续新增答题变量无需修改循环逻辑 */ do i = 1 to dim(ans); if ans[i] = 'A' then total + 5; else if ans[i] = 'B' then total + 4; else if ans[i] = 'C' then total + 3; else if ans[i] = 'D' then total + 2; else if ans[i] = 'E' then total + 1; end; drop i; /* 删除临时循环变量 */ run;
场景2:批量统计指定选项的出现次数
比如统计每个学生选择A选项的题数:
data scholar_count_a; set scholar; array ans[*] ans1-ans10; count_a = 0; do i = 1 to dim(ans); if ans[i] = 'A' then count_a + 1; end; drop i; run;
用数组完成批量计算的优势非常明显,即使后续答题数量增加到几十上百道,只需要修改变量列表即可,不需要调整循环逻辑,代码复用性很高。
内容的提问来源于stack exchange,提问作者maxo
相关产品推荐
相关产品推荐

