执行SAS代码的时间

时间:2015-10-20 20:26:43

标签: statistics sas dataset

我正在学习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 个答案:

答案 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;

现在运行test1test2需要更长的时间。那是因为test1的数据集现在不适合内存,因此它按位读取,而test2的数据集确实适合内存。使行数大得多,比如10M行,并且test1和test2都需要很长时间 - 但是对于test2来说要短一些。

答案 1 :(得分:0)

test2将花费更少的时间来运行,因为它带来的变量更少。