2013-10-05 75 views
1

一:爲什麼隊伍不同?

data have; 
input x1 x2; 
diff=x1-x2; 
a_diff= round(abs(diff), .01); 
* a_diff=abs(diff); 
cards; 
50.7 60 
3.3 3.3 
28.8 30 
46.2 43.2 
1.2 2.2 
25.5 27.5 
2.9 4.9 
5.4 5 
3.8 3.2 
1 4 
; 
run; 

proc rank data =have out =have_r; 
     where diff; 
     var a_diff  ; 
     ranks a_diff_r; 
run; 

proc print data =have_r;run; 

結果:

Obs  x1  x2  diff a_diff a_diff_r 
1  50.7 60.0 -9.3  9.3  9.0 
2  28.8 30.0 -1.2  1.2  4.0 
3  46.2 43.2  3.0  3.0  7.5 
4  1.2  2.2 -1.0  1.0  3.0 
5  25.5 27.5 -2.0  2.0  5.5 
6  2.9  4.9 -2.0  2.0  5.5 
7  5.4  5.0  0.4  0.4  1.0 
8  3.8  3.2  0.6  0.6  2.0 
9  1.0  4.0 -3.0  3.0  7.5 

二:

data have; 
input x1 x2; 
diff=x1-x2; 
a_diff=abs(diff); 
cards; 
50.7 60 
3.3 3.3 
28.8 30 
46.2 43.2 
1.2 2.2 
25.5 27.5 
2.9 4.9 
5.4 5 
3.8 3.2 
1 4 
; 
run; 

proc rank data =have out =have_r; 
     where diff; 
     var a_diff  ; 
     ranks a_diff_r; 
run; 

proc print data =have_r;run; 

結果:

Obs  x1  x2  diff a_diff a_diff_r 
1  50.7 60.0 -9.3  9.3  9.0 
2  28.8 30.0 -1.2  1.2  4.0 
3  46.2 43.2  3.0  3.0  7.5 
4  1.2  2.2 -1.0  1.0  3.0 
5  25.5 27.5 -2.0  2.0  5.0 
6  2.9  4.9 -2.0  2.0  6.0 
7  5.4  5.0  0.4  0.4  1.0 
8  3.8  3.2  0.6  0.6  2.0 
9  1.0  4.0 -3.0  3.0  7.5 

敬請關注,觀測值3,9,5,6,爲什麼隊伍不同?謝謝!

回答

1

運行下面的代碼,你會發現它們實際上是不同的。這是因爲數字存儲的不準確性;類似於1/3如何不能用十進制表示(0.333333333333333等)和1-(1/3) - (1/3) - (1/3)不等於零,如果你使用例如十個數字在存儲每個結果時(它等於0.000000001,那麼),任何計算機系統都會在某些數字上出現問題,而在十進制中(基數爲10)似乎很好地存儲,二進制不會。

這裏的解決方案基本上是按照您的要求進行調整的,或者是達到相同結果(忽略小於1x10^-12的差異)的結果fuzz

data have; 
input x1 x2; 
diff=x1-x2; 
a_diff=abs(diff); 
put a_diff= hex16.; 
cards; 
50.7 60 
3.3 3.3 
28.8 30 
46.2 43.2 
1.2 2.2 
25.5 27.5 
2.9 4.9 
5.4 5 
3.8 3.2 
1 4 
; 
run; 
+0

46.2-43.2 = 3.0 1.0〜4.0 -3.0 = ABS是3.0秩爲7.5,7.5但25.5-27.5 = -2.0 2.9-4.9 = -2.0 ABS是2.0秩是5,6,爲什麼呢? – stata

+0

閱讀我的答案並運行我包含的代碼。你的'put'語句使用默認格式('BEST12.'),它的大小不足以顯示兩行的差異。當然,應該沒有什麼區別,但是,因此,圓解是正確的。 – Joe

+0

區別(3.0和-3.0)hex16。是相同的(4008000000000000),但差異(2.0和2.0)hex16。不一樣(4000000000000000,4000000000000001),爲什麼?你可以解釋嗎? – stata