The following (admittedly long) example.
样本代码生成两个数据集,一个数据是“关键”变量,一、j、k,两个数据是关键变量j、k和“价值”变量x。 我愿尽可能有效地合并这两个数据集。 这两套数据集都与j和k有关:不应需要第一套数据索引,而应推向该指数。
在数据二中,Proc没有使用该指数,如果数据在KQ数据库中,我会认为该指数。 难道这只是限制我必须接受的问候最佳者吗?
http://www.un.org。 这个问题的答案是,《联合国系统会计准则》可以使用一个指数,优化加入《PROCQ》。 在以下例子中,数据集的相对规模是: 如果你修改该代码,使数据2比数据1大,则使用索引。 无论数据集是否分类,都无关紧要。
* Just to control the size of the data;
%let j_max=10000;
* Create data sets;
data one;
do i=1 to 3;
do j=1 to &j_max;
do k=1 to 4;
if ranuni(0)<0.9 then output;
end;
end;
end;
run;
data two;
do j=1 to &j_max;
do k=1 to 4;
x=ranuni(0);
if ranuni(0)<0.9 then output;
end;
end;
run;
* Create indices;
proc datasets library=work nolist;
modify one;
index create idx_j_k=(j k);
modify two;
index create idx_j_k=(j k) / unique;
run;quit;
* Test the use of an index for the other data set:
* Log should display "INFO: Index idx_j_k selected for WHERE clause optimization.";
options msglevel=i;
data _null_;
set two(where=(j<100));
run;
* Merge the data sets with proc sql - no index is used;
proc sql;
create table onetwo as
select
one.*,
two.x
from one, two
where
one.j=two.j and
one.k=two.k;
quit;