将数据集拆分为N个部分

时间:2015-05-20 04:03:44

标签: sas

N由特定字段中的不同值的数量确定。在实际场景中,N非常大,因为每个字段(char列)都有许多不同的值。

示例数据:

A  B  C  D  V1 V2 V3 V4
ab ba cf dm
ab bc cf dm
ab bc cg dm
ac bd cg dm

Vi's是数字列(可能存在缺失值)。 A B C D是具有指示不同子组(没有丢失数据)的值的字符。

字符列数未知。每个字符列中不同值的数量也是未知的。

如果col(i)有n(i)个不同的值,那么N = n(1) * n(2) * ...。在示例数据中,N = 2 * 3 * 2 * 1

:定位:

为每个不同字段的唯一组合生成一个数据集。

相关链接:

Split SAS dataset StackoverfLow

http://www.sascommunity.org/wiki/Split_Data_into_Subsets

2 个答案:

答案 0 :(得分:1)

正如其他人所说,哈希表确实会更好(并且可能更容易管理)。不过,这个怎么样?

测试数据:

data dummy ;
input  A $ B $ C $ D $ v1 v2 v3 v4 ;
cards ;
ab ba cf dm 1 2 3 4 
ab bc cf dm 5 6 7 8
ab bc cf dm 1 2 3 4
ab bc cg dm 9 0 1 2
ac bd cg dm 3 4 5 6
;run ;

按字符变量对数据进行排序(只需在此处列出):

proc sort data=dummy ;
  by a b c d ;
data output ;
  set dummy end=EndoFile ;
  by a b c d ;
  if first.d then count+1 ;
  if EndoFile then call symput('ucount',count) ;
run ;

从原始数据创建单独的数据集;

%macro split ;
%do i=1 %to &ucount ;
data d&i ;
  set output(where=(count=&i)) ;
run ;
%end ;
%mend split ;
%split ;

答案 1 :(得分:1)

使用与Bendy创建的相同的虚拟数据集,这将按照a,b,c和d的唯一组合分成一个数据集:

img{float:left;padding:0 15px 0 0}