我对 SAS 比较陌生,所以我可能会忽略我不知道的 SAS 基本功能。
我有一个带有数值变量“A”的大型数据集。我想编写一个宏,允许我基于数组创建存储桶,但数组的长度和值可以更改。
示例 1:我的数组为 {1, 2, 6, 10},在这种情况下,所有观测值为 A 小于 1 的应该在桶 1 中, 存储桶 2 中介于 1 和 2 之间的值, 存储桶 3 中 2 到 6 之间的值以及 桶 4 中 6 到 10 之间的值
示例 2:我的数组为 {3, 10},在这种情况下,所有观测值为 A 小于 3 的应该在桶 1 中并且 桶 2 中 3 到 10 之间的值
理想情况下,我希望数组成为宏的输入变量。或者,如果这是不可能的,我只需要更改宏中的硬编码数组。
谢谢您的帮助。
作为新手,我还没有尝试过任何东西。
使用“数组”来解决此问题的一种方法是在数据步骤中创建一个临时数组,并将值初始化为值列表。 然后只需查看数组,直到查找的值大于列表中的当前项。
让我们在 SASHELP.CLASS 中的数据上尝试一下,并将 AGE 分成 3 个桶,如下所示:
data class;
set sashelp.class;
array list [2] _temporary_ (12 15);
do bucket=1 to dim(list) until(age <= list[bucket]);
* do nothing ;
end;
run;
让我们看看效果如何:
proc freq data=class;
tables bucket*age / list ;
run;
结果
The FREQ Procedure
Cumulative Cumulative
bucket Age Frequency Percent Frequency Percent
------------------------------------------------------------------
1 11 2 10.53 2 10.53
1 12 5 26.32 7 36.84
2 13 3 15.79 10 52.63
2 14 4 21.05 14 73.68
2 15 4 21.05 18 94.74
3 16 1 5.26 19 100.00