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
。
:定位:
为每个不同字段的唯一组合生成一个数据集。
相关链接:
答案 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}