SAS代码执行时间
Time of execution of SAS code
我正在为我的 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)中哪一个会占用更少
我认为两者花费相同的时间到 运行 因为基本上两者都以不同的顺序发出相同的指令。我是正确的?或者指令的顺序会影响 运行时间?
测试 2 到 运行 所需的时间更少,因为它引入的变量更少。
这本书正在寻找的答案是 test2
会更快。那是因为两者有的区别:
test1: Read in all variables, only write out 3 of them
test2: Read in 3 variables, write out all variables read
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 的数据集确实适合内存。使其逐行更大,比如 1000 万行,test1 和 test2 都需要很长时间 - 但 test2 会稍微短一些。
我正在为我的 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)中哪一个会占用更少
我认为两者花费相同的时间到 运行 因为基本上两者都以不同的顺序发出相同的指令。我是正确的?或者指令的顺序会影响 运行时间?
测试 2 到 运行 所需的时间更少,因为它引入的变量更少。
这本书正在寻找的答案是 test2
会更快。那是因为两者有的区别:
test1: Read in all variables, only write out 3 of them
test2: Read in 3 variables, write out all variables read
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 的数据集确实适合内存。使其逐行更大,比如 1000 万行,test1 和 test2 都需要很长时间 - 但 test2 会稍微短一些。