【发布时间】:2013-11-07 04:37:42
【问题描述】:
我被难住了。
我想将一个非常大的数据集减少为更少的观察,但包含原始数据集的所有级别(最多)一次。这样做是出于测试目的,因此提出具有最少 obs 数量的最终数据集符合我们的最大利益。
因此,如果我们以数据集 SASHELP.CLASS 为例。我想找出覆盖原始数据集每个单独级别的第一个 obs(或任何非特定的 obs,但我觉得第一个/最后一个 obs 可能更容易),不是 所需变量的所有可能(现有或理论)组合。
输出如下所示:(SASHELP.CLASS: all levels by AGE, SEX):
- AGE 有 6 个不同的级别 (11-16)
- SEX 有 2 个不同的级别(“F”、“M”)
- 理论上,涵盖这些级别的最少 obs 数量为 6。
所以我们应该得到:
- OBS #1:Affred,“M”,14
- OBS #2:爱丽丝,“F”,13
不会输出芭芭拉、卡罗尔和亨利,因为 F-M 和 13-14 都被覆盖了
- OBS #3:詹姆斯,“M”,12
- OBS #4:珍妮特,“F”,15
- OBS #5:乔伊斯,“F”,11
- OBS #6:菲利普,“M”,16
输出结束
在这种情况下,我们按顺序检查数据,我们发现满足要求的最少 obs (6) 数量,但如果级别变得更长(或相互关联),并且数据分类(假设我们可以-sort),我们最终可能会得到一个接近最小值,但不是所需变量中最长级别的最小值。
我想这需要某种递归算法才能最有效地获得少量 obs 来覆盖这些值,但不知道从哪里开始。任何帮助将不胜感激!
【问题讨论】:
-
您是否需要行中的类变量(此处为年龄和性别)之外的其他数据?如果是这样,其中有多少 - 另一个或两个或多个变量,有序的或离散的?