3

SAS がデータ ステップをどのように読み取り/実行するかを理解する必要があります。SASがデータステップを読み取る方法に関する情報を調べたところ、通常のデータステップとの関連では理解できない、マージ目的での読み取り方法に関する情報しかないようです。たとえば、次のコード行があるとします。

data work.DATA;
  if amount_a= . then
     amount_a= 1;
  amount_b= 1;
  amount_a= . ;
  total = (amount_a + amount_b) + 0 ;
run;

さて、これを考えると、「合計」は何に等しいでしょうか? 基本的に、SAS がこのステップをどのように読み取るかを知りたいのですが、どの行を最初に読み取り/実行しますか? それは最後から始まり、上に向かって進んでいきますか? それとも、一番上から始めて、下に向かって進んでいきますか? ありがとう。

4

1 に答える 1

5

SAS データステップDATAは、ステートメントで始まり、ステートメントで終わるコードを上から下に処理しますRUN;。データ ステップには、コードに明示的な出力ステートメントがない場合のOUTPUT;直前に含まれる暗黙のステートメントがあります。RUN;

SAS は「解釈される」言語であるため、各データ ステップのコードは実行前にコンパイルされます。コンパイルの一部には、プログラムで使用されるすべての変数の実行属性を含むプログラム データ ベクトル (PDV)と呼ばれる構造体の作成が含まれます。変数は、コードに表示される順序 (上から下) で PDV に定義されます。

便利なデバッグ ツールはPUTLOGステートメントです。このステートメントを使用すると、プログラムの実行中に出力を SAS ログ ファイルに書き込むことができます。たとえば、次のように考えてください。

data work.DATA;
   if amount_a= . then
      amount_a= 1;
   amount_b= 1;
putlog amount_a= amount_b=;
   amount_a= . ;
putlog amount_a= amount_b=;
   total = (amount_a + amount_b) + 0 ;
putlog amount_a= amount_b= total=;
   output;
run;

OUTPUT;説明のために明示的なステートメントを追加したことに注意してください。結果は、1 つのオブザベーションと 3 つの変数を含む SAS データセットです。変数totalは、計算時に欠落しているため、欠落した値になりamount_aます。また、SAS ログには、「欠損値が生成されました」ことを示す NOTE が表示されます。

SAS がこれをどのように行うかについて学ぶのに最適な場所は、SAS 言語リファレンス: 概念ブックです。 SAS バージョン 9.3 の書籍へのリンクを次に示します。特に、 Data Step Processingの章を読んでください。

于 2013-04-28T17:07:05.163 に答える