2017-12-13 4 views
0

다음 코드가 있습니다. 작성된 데이터 세트는 test_means 및 test_sql입니다. 둘 다 당신이 선택한 변수의 단순 평균을 취하고 있습니다.proc 평균과 proc SQL 단계를 찾는 것이 proc 비교에 따라 다른 결과를 얻는 이유는 무엇입니까?

둘 다 눈으로 정확히 동일한 숫자를 만듭니다.

왜 proc compare는 값이 0E-14와 같이 어리석은 작은 값과 다른가요? 이것은 두 절차에 숫자가 저장되는 방식과 관련이 있습니까? E-14 정도의

%let var=; *Insert numeric variable to check; 
%let dsn=; *Insert dataset name; 

proc means noprint mean data=&dsn.; 
    var &var.; 
    output out=test_means (keep=_STAT_ &var. where=(_STAT_="MEAN")); 
run; 

proc sql; 
    create table test_sql as select 
     "MEAN" as _STAT_ length=8, 
     mean(&var.) as &var. 
    from &dsn. 
    ; 
quit; 

proc compare data=test_means compare=test_sql; 
run; 
+0

PROC COMPARE에 대한 설명서를보십시오. 특히 METHOD = 옵션. –

+0

부동 소수점 숫자를 사용하여 발생하는 반올림 오류라고 가정합니다. 누군가가 데이터가 처리되는 순서가 작업의 결과에 영향을주는 예제를 보여준 최근 게시물이 없었습니까? – Tom

+0

큰 차이는 없습니다. PROC COMPARE의 FUZZ 옵션이나 소프트웨어의 수치 정밀도를보십시오. – Reeza

답변

1

차이 (SAS 번호는 그대로) 부동 소수점 값에 수행 계산으로부터 예상 할 수있다. 이것은 특히 다른 PROC와 관련이 없습니다. 그 선을 따라 오류를 생성하기 위해서는 다른 순서로 값을 합산하는 것이 전부입니다. PROC SQL에서 두 개의 다른 실행을해도 행이 다르게 처리되면 (예 : 멀티 스레딩으로 인해)이 크기의 차이가 발생할 수 있습니다.

PROC COMPARE 매우 작은 크기의 숫자를 비교하지 않는 한, 일반적으로 실행은 FUZZ 옵션으로 수행해야합니다. 이러한 차이 (특히 두 파일이 동일한 파일이 아니라 동일한 값이 아닌지 확인하려는 경우가 아니라는 것을 의미)를 보려는 경우가 아니면 일반적으로 표준 연습의 일부 여야합니다.