Sas 将数据集拆分为N个部分
N由特定字段中不同值的数量确定。在实际场景中,N相当大,因为每个字段(char列)都有许多不同的值 样本数据:Sas 将数据集拆分为N个部分,sas,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的是数字列(可能存在缺失值)。A B C D是具有表示不同子组(无缺失数据)的值的字符 字符列的数目未知。每个字符列中不同值的数量也是未知的 如果列(i)有n(i)个不同的值,则n=n(1)*n(2)*…。在示例数据中,N=2*3*2*1
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的
是数字列(可能存在缺失值)。A B C D是具有表示不同子组(无缺失数据)的值的字符
字符列的数目未知。每个字符列中不同值的数量也是未知的
如果列(i)有n(i)个不同的值,则n=n(1)*n(2)*…
。在示例数据中,N=2*3*2*1
目标:
A B C D V1 V2 V3 V4
ab ba cf dm
ab bc cf dm
ab bc cg dm
ac bd cg dm
为不同字段的每个唯一组合生成一个数据集
相关链接:
A B C D V1 V2 V3 V4
ab ba cf dm
ab bc cf dm
ab bc cg dm
ac bd cg dm
正如其他人所说,哈希表确实会更好(而且可能更容易管理)。不过,这个怎么样 测试数据:
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 ;
按字符变量对数据进行排序(只需在此处列出):
从原始数据中创建单独的数据集
%macro split ;
%do i=1 %to &ucount ;
data d&i ;
set output(where=(count=&i)) ;
run ;
%end ;
%mend split ;
%split ;
使用与Bendy创建的相同的虚拟数据集,将每个a、b、c和d的唯一组合拆分为一个数据集:
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 ;
%macro lup;
proc sql noprint;
select distinct compress(a!!"_"!!b!!"_"!!c!!"_"!!d) into :dataset1-:dataset99999
from dummy;
quit;
%put &sqlobs;
data
%do i=1 %to &sqlobs;
&&dataset&i
%end;
;
set dummy;
%do i=1 %to &sqlobs;
if compress(a!!"_"!!b!!"_"!!c!!"_"!!d)="&&dataset&i" then output &&dataset&i;
%end;
run;
%mend;
%lup;
如sascommunity链接中所述,不建议这样做。为什么要将数据集拆分为更小的子集?您希望您的输出是什么?既然您似乎有解决方案,但声称它们太慢,但哈希解决方案将很难调试或扩展,那么您在这里的问题是什么?因此,您只需要为字符变量c(1)-c(i)的每个唯一组合生成一个数据集?您试图对分组处理无法处理的单独数据集做什么?在几乎所有情况下,将其保存在一个数据集中(使用某种“按”变量)比拆分数据集要好得多。哈希表之所以更好,主要是因为它们允许您在不知道有多少数据集的情况下动态生成自定义数据集。