9

私は SAS を初めて使用します。現在、次のようなSASデータテーブルがあります。

    ID       score
-------------------
    01         1
    02         3
    03         4
    04         2

PROC SORT と DATA ステップのみを使用して、このテーブルの観測数を保存する方法はありますか? SASログスクリプトの「ホールドN = 4」のようなログウィンドウに値を保持したい。

専門外の説明で申し訳ありません。前もって感謝します。

4

3 に答える 3

9

新しい SAS ユーザーとして、必要なのはNOBSオプションだけかもしれません。ただし、コーディング スキルが向上するにつれて、適切ではない状況に陥ることがあります。SETステートメントのNOBSオプションは、すべての場合に機能するとは限りません。返される値は、インプレースで削除された可能性のある観測を含む、データ セット内の物理観測の数になります。また、特定のビュー (特に外部データベースに接続されたビュー) では機能しない場合があります。

データセットまたはビューで削除されていない観測の数を見つける「最も安全な」方法は、それらを使用PROC SQLして実際にカウントし、結果をマクロ変数に入れることです。たとえば、HAVE という名前のデータ オブジェクトがあるとします。

proc sql noprint;
   select count(*) into : nobs
   from WORK.HAVE;
quit;
%put 'Obs in data set:' &nobs;

これは、HAVE がデータ セットまたはビューの場合に機能することに注意してください。

または、オブジェクトが単なるデータセットである場合は、SAS TABLES ディクショナリ ビューを使用して、NLOBS属性を返すことができます。この属性には、"論理" オブザベーションの数が含まれます (つまり、削除された行が含まれます)。

proc sql noprint;
   select nlobs into : nobs
   from dictionary.tables
   where libname='WORK'
    and memname='HAVE';
quit;
%put 'Obs in data set:' &nobs;

SAS データセットが非常に大きい場合、これは確かにより効率的です。なぜ SAS がこのNLOBS値をSETステートメントのオプションとして使用可能にしないのか、私はしばしば疑問に思いましたが、理由があることは確かです。

PROC SQL、ビュー、マクロ変数、およびインプレース削除されたオブザベーションは、今はすべて新しいものかもしれませんが、SAS の学習が進むにつれて、それらを使い始めることになります。

于 2013-10-27T16:39:25.270 に答える