我正在学习SAS考试,我发现了以下问题:
给定具有5000个观测值的数据集,并给出以下两个数据集(第一个的子集)。
Data test1 (keep= cust_id trans_type gender);
Set transaction;
Where trans_type = ‘ Travel’ ;
Run;
Data test2;
Set transaction (keep= cust_id trans_type gender);
Where trans_type = ‘ Travel’ ;
Run;
予。上述两个数据集中的哪一个(test1,test2)将占用较少的
我认为两者都需要同时运行,因为基本上两者都以不同的顺序生成相同的指令。我是正确的?或指令的顺序会影响运行时?
答案 0 :(得分:2)
本书正在寻找的答案是test2
会更快。那是因为 是两者之间的差异:
test1:读入所有变量,只写出3个
test2:读入3个变量,写出所有读取的变量
SAS基于物理数据集结构具有一些优势,可以更有效地读取数据集的子集,特别是如果这些变量是连续存储的。
然而,在现实世界的场景中,这可能是也可能不是,特别是在5000行数据集中,可能看不到两者之间的任何差异。例如:
data class1M;
set sashelp.class;
do _i = 1 to 1e6;
output;
end;
run;
data test1(keep=name sex);
set class1M;
run;
data test2;
set class1M(keep=name sex);
run;
这两个数据步骤都需要相同的时间长度。这可能是因为数据集被读入内存然后根据需要抓取位 - 一个250MB的数据集不足以触发任何效率。
但是,如果你添加了许多其他变量:
data class1M;
set sashelp.class;
length a b c d e f g h i j k l 8;
do _i = 1 to 1e6;
output;
end;
run;
data test1(keep=name sex);
set class1M;
run;
data test2;
set class1M(keep=name sex);
run;
现在运行test1
比test2
需要更长的时间。那是因为test1的数据集现在不适合内存,因此它按位读取,而test2的数据集确实适合内存。使行数大得多,比如10M行,并且test1和test2都需要很长时间 - 但是对于test2来说要短一些。
答案 1 :(得分:0)
test2将花费更少的时间来运行,因为它带来的变量更少。