web-dev-qa-db-ja.com

SASテーブル内の観測数をカウントする方法は?

SASは初めてです。これで、SASデータテーブルが次のようになりました。

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

この表に観測数を保存する方法はありますかPROC SORTおよびDATAステップのみを使用? SASログスクリプトの "hold N = 4"のような値をログウィンドウに保持したい。

私の専門外の説明でごめんなさい。前もって感謝します。

7
Munichong

Setステートメントでnobs =を使用します。

data _null_;
set xyz nobs=nobs;
put "HOLD N=" nobs ;
stop;
run;
2
DomPazz

新しい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 Dictionaryビューを使用して[〜#〜] 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の学習を進めるにつれて、それらを使用し始めることができます。

8
BellevueBob