SAS中的大数据集条件拆分

SAS中的大数据集条件拆分,sas,bigdata,Sas,Bigdata,我需要关于如何有效分割数据集(大约700万行和280列)的建议。 “我的数据集”包含非唯一的列“department”和“classid”。 我想根据部门变量和最大观察次数(100k)分割数据集。以下示例显示了另一个限制: Ex 1: math_1 - 10k rows math_2 - 80k rows math_3 - 20k rows Result 1: math_1 + math_2 -> 90.000 rows - OK math_3 -> 20.000 rows -

我需要关于如何有效分割数据集(大约700万行和280列)的建议。 “我的数据集”包含非唯一的列“department”和“classid”。 我想根据部门变量和最大观察次数(100k)分割数据集。以下示例显示了另一个限制:

Ex 1:

math_1 - 10k rows
math_2 - 80k rows
math_3 - 20k rows

Result 1:

math_1 + math_2 -> 90.000 rows - OK
math_3 -> 20.000 rows - OK

Ex. 2:

math_1 - 90k rows
math_2 - 80k rows
math_3 - 10k rows

Result 2.1:

math_1 + math_2 -> 100k rows (90k from math1, 10k from math2) -> not OK 
math_2 + math_3 -> 80k rows (70k from math_2, 10k from math_3 -> not OK
math_2
被拆分为两个表,尽管它可以放在一个表中,所以应该像这样拆分:

Result 2.2:

math_1 -> 90k rows -> OK
math_2 + math_3 -> 90k rows -> OK
即使
math_2
不适合一个表,我也不希望它与另一个原始表中的行混合


我试图用哈希表来解决这个问题,但由于列的数量太多,我的内存不足。

不确定哈希表在这里要做什么

首先,我将按部门和ClassID汇总数据。把计数放在一张表中。然后,您可以在表中创建一个名为group的新变量。如果总数>X数量,则组+1,否则组相同。这将创建一个告诉您文件结构的变量

然后将该数据集与组一起用于构建表拆分。我建议使用调用EXECUTE或DOSUBL将数据分割成子集

最大90K的700万将是8个以上的数据集……但如果要了解您需要去哪里获取数据,这将是一场噩梦,因为它的设计不符合逻辑。因此,无论如何,您都需要引用此表

data have;
input department $ classID $ num_records;
cards;
A math1 500
A math2 500
A math3 200
A math4 100
;
run;

data groups;
set have;
retain running_total;
running_total=sum(running_total, num_records);
if running_total >= 500 then do; group+1; running_total=num_records;
end;
run;

如果真的,真的需要的话,使用上面的链接来创建子集

创建要使用的测试数据集:
数据测试;设置原件(保留=部门classid);运行

使用
PROC tablate
获取部门和分类的概述

使用
PROC排序;按部门分类
对数据进行排序

写入SAS代码以写入SAS代码以拆分数据:

数据为空; 将数据分类1;原创;如果classid=“数学1”;跑

因此,用于拆分的代码如下所示:

Result 2.2:

math_1 -> 90k rows -> OK
math_2 + math_3 -> 90k rows -> OK
数据分类1; 原创; 如果classid=“数学1”; 运行

数据分类2; 原创; 如果classid=“数学2”; 运行


700万不是那么多tbh,您可以添加一些索引来提高性能吗?规则不是固定不变的,因此更难实施。只按部门和classid进行划分会更容易。这种方式似乎也会使它在将来更难使用,因为没有一个定义良好的系统,所以试图查找和使用数据会有问题。