2

データセットの並べ替え順序を見つけるための SAS 固有の方法はありますか?

4

5 に答える 5

3

Sassyが言うように、SASがデータセットが並べ替えられているかどうかを知る唯一の方法は、データセットが並べ替えを行ったかどうか、または明示的に並べ替え順序を指定したかどうかです。これらの手順のいずれかを実行していない場合、データが任意のタイプの順序であるかどうかはわかりません。

並べ替えるだけというAFHoodのアイデアが好きです。SASがそのようにソートされていることを知っている場合、SASはそれを通知するだけで、再度実行することはありません。

NOTE: Input data set is already sorted, no sorting done

データの並べ替えを調査するための他のアイデアをいくつか紹介します...お楽しみください。

手動で確認したい場合は、proc contents data =libname.data;run;を使用できます。出力を見てください。ソートと呼ばれる属性があります。ウィンドウモードを使用している場合は、エクスプローラーでデータセットを右クリックしてプロパティを選択し、[詳細]タブをクリックして、並べ替えられた値を確認できます。

プログラムによるテストアプローチでは、procコンテンツからの出力データセットを使用できます。並べ替えられた列と並べ替えられた列は、データセットが並べ替えられているかどうか、およびデータセットが並べ替えられている変数を示します。以下のコードを実行して試してください。

/* In an unsorted data set, proc contents will give missing values
   for the sorted and sortedby columns of its output data */
proc contents data=sashelp.class out=class_contents noprint;run;
proc print data=class_contents;
  var memname name sorted sortedby;
run;

/* Now sort and observe the changes in the sorted and sortedby columns */
proc sort data=sashelp.class out=class_sorted; by name;run;
proc contents data=class_sorted out=class_sorted_contents;run;
proc print data=class_sorted_contents;
  var memname name sorted sortedby;
run;`enter code here`
于 2009-03-05T23:23:00.483 に答える
2

この機能を使用できますAttrc

http://support.sas.com/onlinedoc/913/getDoc/en/lrdict.hlp/a000147794.htmのドキュメント

次のようになります

data _null_;
   dsid=open("work.a","i");
   sortby=attrc(dsid,"SORTEDBY");
   put  sortby=;
   rc=close(dsid);
run;
于 2009-03-09T21:26:55.250 に答える
1

あなたが解決している問題は、データセットをプログラムでソートする必要があるかどうかを判断しようとしていると思います。私たちが使用した最善の解決策は、疑わしい場合は単純に proc sort を使用することです。

もちろん、それはオーバーヘッドと処理だと言うかもしれません..そうですが、データセットがすでに正しくソートされている場合は、それを認識して proc sort を実行し、最小限の処理でコードを進めてください。「並べ替えられたら次に進む」ロジックが組み込まれています。

これがあなたが解決しようとしている問題でない場合は、詳しく説明してください。解決できるかどうかを確認します。

于 2009-03-05T18:51:14.240 に答える
0

sas がデータをソートしなかったが、ソートされている可能性があると思われる場合は、ソートされているかのようにデータを処理し、結果として発生する可能性があるエラーまたは発生しない可能性があるエラーに対処することができます。

* This works, swap some values to see how an error looks;
data foo;
input height;
cards;
1
2
3
4
;
run;

data _null_;
set foo;
by height;
run;

エラー状態はマクロで検出してリセットできますが、そのアプローチは面倒になる可能性があります。詳細はこちら

于 2009-03-05T23:53:49.130 に答える