PGのフロー2
 SASは1レコードずつ取り込んでいく特徴がある。
 例えば↓データセット「SAMPLE01」と2つのPGがあったとしよう。

TEST01
行1 X1
行2 X2
行3 X3

例1:
DATA WK01_1;
TEST02=TEST01;
SET SAMPLE01;
RUN;

例1の実行結果:
TEST01 TEST02
行1 X1
行2 X2 X1
行3 X3 X2

例2:
DATA WK01_2;
SET SAMPLE01;
TEST02=TEST01;
RUN;

例2の実行結果:
TEST01 TEST02
行1 X1 X1
行2 X2 X2
行3 X3 X3

 例2が通常の流れ。
 例1のPGで何故こうなるかについて。

 0.行1の処理開始。
 1.データをセットする前に命令「TEST02=TEST01」を出しているので、行1にブランクがくる。
 2.「TEST02」に値「X1」がセットされる。
 3.行2の処理に移る。
 4.「X1」がセットされており、命令「TEST02=TEST01」が出されると、行2に「X1」がセットされる。
 5.「TEST02」に値「X2」がセットされる。
 6.行3の処理に移る。

 …(以下略)…

 これらはSASが1オブザベーション毎に処理していくために発生する。
 ま、慣れてしまえばどうってことはない。

05APR2008 update.