質問

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

役に立ちましたか?

解決

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

私は、AFHoodのソートを試みるというアイデアが好きです。 SASがそのようにソートされていることを知っている場合、それは単にあなたに通知し、二度としません。

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

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

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

プログラムによるテストアプローチの場合、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`

他のヒント

データが実際に「ソート」されている場合、はい。 procコンテンツによって生成される出力の下部には、ソート情報に関する小さなテーブルがあります。

既に何らかのソート順のデータで構築されたデータセットには、この情報が添付されていない可能性があるため、データの探索を開始して順序を決定する必要があります。

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;

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

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

これがあなたが解決しようとしている問題でない場合は、詳細に説明してください。

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;

エラー状態はマクロで検出およびリセットできますが、そのアプローチは面倒になりがちです。詳細については、こちら

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top