* 참고 : http://support.sas.com/techsup/technote/ts230.html
* FUZZ 계열 함수;
* SAS에서 정밀도 오차(Precision error)가 발생하네요..
* 정확한 원인은 모르겠지만, 수치 처리시에 발생하는 문제인듯 합니다.;
* 사전에 ROUND함수 등을 통하여서 자리수를 맞춰주면 해결 될 듯 합니다.
data ex;
input VAR1 VAR2 VAR3 VAR4;
datalines;
89.1 87.7 83 81.6
89.1 87.71 83 81.61
89.1 87.69 83 81.59
90.1 88.7 84 82.6
2.4 1 3.4 2
3.1 1.7 5 3.6
3 1.6 5 3.6
2.9 1.5 3.3 1.9
89.2 87.8 83.1 81.7
89.1 87.8 83 81.7
89.3 87.8 83.2 81.7
89.4 87.8 83.3 81.7
12.5 11.1 3.5 2.1
12.6 11.1 3.6 2.1
12.7 11.1 3.7 2.1
12.8 11.1 3.8 2.1
12.9 11.1 3.9 2.1
13 11.2 4 2.2
13 11 4 2
13.1 11.1 4.1 2.1
89.1 87.7 89.1 87.7
;
options ls=200;
PROC SQL;
SELECT VAR1 - VAR2 AS VAR11 format= best32.,
VAR3 - VAR4 AS VAR22 format= best32.,
/* BEST32.로 구분 못하는 경우 발생하여서 Hex16. 사용*/
VAR1 - VAR2 AS VAR55 format= hex16.,
VAR3 - VAR4 AS VAR66 format= hex16.,
/* ROUND 함수를 사용하여서 해결 */
ROUND(VAR1 - VAR2,0.1) AS VAR33,
ROUND(VAR3 - VAR4,0.1) AS VAR44,
CASE WHEN VAR1-VAR2 = VAR3 - VAR4 THEN '동일'
ELSE '상이' END AS SAM_YNO,
CASE WHEN ROUND(VAR1-VAR2,0.1) = ROUND(VAR3 - VAR4,0.1) THEN '동일'
ELSE '상이' END AS SAM_YNO,
A.*
FROM EX A;
QUIT;
* PROC SQL 만의 문제는 아님;
DATA BACK;
SET EX;
VAR11 = VAR1 - VAR2;
VAR22 = VAR3 - VAR4;
IF VAR1-VAR2 = VAR3 - VAR4 THEN SAM_YNO = '동일';
ELSE SAM_YNO = '상이';
RUN;
Catch the best of SAS Innovate 2025 — anytime, anywhere. Stream powerful keynotes, real-world demos, and game-changing insights from the world’s leading data and AI minds.