데이터 세트의 첫 번째 2 개 변수로 이전에 데이터 세트를 정렬 한 경우 데이터 세트의 sortedby
정보에 관계없이 SAS는이를 정렬하기 위해 더 적은 CPU 시간을 사용합니다 *. 이것은 대부분의 알맞은 정렬 알고리즘의 자연스러운 속성입니다. 이미 거의 정렬 된 것을 정렬하는 것이 훨씬 적습니다.
* proc sort
문에서 force
옵션을 사용하지 않는 한 강제로 중복 정렬을 수행합니다.
여기에 내가 도망 약간의 테스트는 다음과 같습니다
- SAS는 3 개 변수에 의해 원래 완전하게 정렬되지 않은 데이터 집합을 분류 8 초 걸렸 다음과 같이 내가 가진
option fullstimer;
/*Make sure we have plenty of rows with the same 1 + 2 values, so that sorting by 1 + 2 doesn't imply that the dataset is already sorted by 1 + 2 + 3*/
data test;
do _n_ = 1 to 10000000;
var1 = round(rand('uniform'),0.0001);
var2 = round(rand('uniform'),0.0001);
var3 = round(rand('uniform'),0.0001);
output;
end;
run;
/*Sort by all 3 vars at once*/
proc sort data = test out = sort_all;
by var1 var2 var3;
run;
/*Create a baseline dataset already sorted by 2/3 vars*/
/*N.B. proc sort adds sortedby information to the output dataset*/
proc sort data = test out = baseline;
by var1 var2;
run;
/*Sort baseline by all 3 vars*/
proc sort data = baseline out = sort_3a;
by var1 var2 var3;
run;
/*Remove sort information from baseline dataset (leaving the order of observations unchanged)*/
proc datasets lib = work nolist nodetails;
modify baseline (sortedby = _NULL_);
run;
quit;
/*Sort baseline dataset again*/
proc sort data = baseline out = sort_3b;
by var1 var2 var3;
run;
관련 결과가 있었다.
- SAS는 이미 2/3 변수로 정렬 된 기준선 데이터 세트에서 시작하여 3/3로 정렬하는 데 4 초가 걸렸습니다.
- SAS는 정렬 정보를 제거한 후 동일한 기준선 데이터 세트에서 시작하여 3 초에 3 초씩 정렬하는 데 4 초가 걸렸습니다.
로그 출력의 관련 메트릭은 사용자 CPU 시간입니다.
물론 거의 정렬 된 데이터 세트가 매우 크고 다른 변수가 많이 포함 된 경우이를 대체 할 때 쓰기 오버 헤드로 인한 정렬을 피할 수 있습니다. 취할 수있는 또 다른 접근법은 복합 색인을 작성하는 것입니다. 이렇게하면 그룹 처리와 관련된 작업을 수행 할 수 있습니다. 인덱스를 생성
/*Alternative option - index the 2/3 sorted dataset on all 3 vars rather than sorting it*/
proc datasets lib = work nolist nodetails;
/*Replace the sort information*/
modify baseline(sortedby = var1 var2);
run;
/*Create composite index*/
modify baseline;
index create index1 = (var1 var2 var3);
run;
quit;
은 전체 데이터 세트의 읽기를 요구하는 종류의, 그러나 다시 그것을 서면으로 관련된 작업의 일부를 수행하고, 2/3 3/3보다 빠를 수도로 어떤 상황에서는 정렬.
group 문을 사용하여 NOTSORTED 옵션을 살펴보십시오. 예를 들어 다음과 같습니다. http://support.sas.com/documentation/cdl/en/proc/61895/HTML/default/viewer.htm# a000146730.htm –
병합을 위해 정렬해야합니까? –
각 ID/레이블 쌍 내에서 가장 빈번한 빈도를 유지하도록 정렬하고 있습니다. – Nick