2012-10-04 3 views
5

저는 proc sql에서 stimer 옵션을 정의하는 것과 같은 것을 알고 싶었습니다. PROC SQL 옵션 STIMER | NOSTIMERPROC SQL이 전체 프로 시저에 대한 누적 값을 쓰는 대신 각 명령문에 대한 타이밍 정보를 SAS 로그에 기록할지 여부를 지정합니다. NOSTIMER이 기본값입니다.데이터 단계 쿼리의 타이밍 정보를 얻는 방법

이제 데이터 세트 단계에서 타이밍 정보를 지정하는 방법과 동일합니다. 난 프로 시저 SQL 단계를 사용하고 있지 않다

data h; 
select name,empid 
from employeemaster; 
quit; 

답변

5

PROC SQL 단계는 개별적으로 효과적으로 데이터 단계를 분리하므로 특정 의미에서 항상 SAS와 동일한 정보를 얻습니다. 당신이 묻는 것은 효과적으로 '이름 선택'이 'empid'대 얼마나 오래 걸리는지를 찾는 법입니다.

데이터 단계에서 개별 명령문의 타이밍을 직접 가져 오는 방법은 없지만 알아낼 데이터 단계 코드를 작성할 수 있습니다. 문제는 데이터 단계가 행 단위로 실행되므로 PROC SQL STIMER 세부 정보와 매우 다릅니다. 해시 테이블 조회와 같은 더 복잡한 작업을 수행하지 않는 한 데이터 단계에서 수행하는 작업은 거의 그 자체로 매우 오래 걸립니다. 오래 걸리는 것은 데이터를 먼저 쓰고 데이터를 두 번째로 읽는 것입니다.

긴 데이터 단계의 문제 해결에 대한 몇 가지 옵션이 있습니다. 옵션 MSGLEVEL = 인덱스 사용, 병합 세부 정보 등에 대해 알려 드리며, 특정 작업을 수행하는 데 오랜 시간이 걸리는 이유를 모르는 경우 도움이 될 수 있습니다. 자세한 내용은 SAS 설명서의 http://goo.gl/bpGWL을 참조하십시오. 당신은 당신의 자신의 타임 스탬프를 작성할 수 있습니다 대부분의 데이터 단계 반복이 매우 오래 걸리지 않을 것입니다하지만 당신은 멋진 일을하는 경우가 도움이 될 수 있기 때문에 그 사용이 많이 표시되지 않습니다

data test; 
set sashelp.class sashelp.class; 
_t=time(); 
put _t=; 
run; 

의 확률이다. 조건문을 사용하여 특정 간격으로 시간을 인쇄 할 수도 있습니다. 예를 들어 FIRST.ID에서 ID로 작업하는 프로세스에서 시간을 인쇄 할 수 있습니다.

궁극적으로 메모에서 이미 얻은 정보가 가장 유용합니다. PROC SQL에서 STIMER 정보가 필요합니다. SQL은 한 번에 여러 가지 작업을 수행하는 반면 SAS는 모든 작업을 단계별로 수행 할 수 있기 때문입니다. 당신이 그 단계 (두 정렬 및 병합)의 각각의 기간에 대한 정보를 얻을 것이라고 들어

proc sort data=a; by ID; run; 
proc sort data=b; by ID; run; 
data x; 
merge a(in=a) b(in=b); 
by id; 
if a and b; 
run; 

: - : 예하지만 SAS이는 것

PROC SQL; 
create table X as select * from A,B where A.ID=B.ID; 
quit; 

한 단계입니다 SAS는 STIMER가 말하는 것과 유사합니다.

+1

+1 좋은 답변입니다. 해시 테이블 조회가 거의 즉시 (해시 알고리즘이 매우 효율적이기 때문에 기본적으로 아무 것도없는 값을 해싱하는 데 걸리면 오래 걸릴 수 있음) 명확하지만 해시 테이블을 메모리에로드하는 데는 시간이 걸릴 수 있습니다 . –

-1

도중. PROC SQL STIMER은 개별적으로 실행 가능한 SQL 문/쿼리마다 타이밍을 기록합니다. 데이터 단계에서 알 수 있듯이 데이터 단계 루핑이 발생하며 관찰 당 관찰되므로 데이터 단계 문 타이밍은 관찰 당 같을 것입니다. 트랜잭션을 가정 해 봅시다. 어쨌든이 시간은 디스크 읽기, 쓰기 등을 기다리는 모든 세부 사항을 설명하지는 않습니다. 그래서이 방법은 유용하지 않을 것 같습니다. 일반적으로 SAS 성능은 I/O에 의해 좌우됩니다.

관련 문제