2017-12-13 30 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の2つの異なる実行であっても、行が異なる方法で処理されると(たとえば、マルチスレッドのために)、この大きさの違いが生じる可能性があります。

PROC COMPARE非常に小さな数値で数値を比較しない限り、実行は通常FUZZオプションで実行する必要があります。この種の違い(特に2つのファイルが同じファイルであり、同じ値ではないことを確認する場合を除き、意味する)を見たい場合を除き、通常は標準的な方法です。

関連する問題