次オブザベーションの値を参照する方法

[OS] ALL
[リリース] ALL
[キーワード] Base, DATA, next observation

[質問]

現在読み込まれているオブザベーションの値と、次に読み込まれるオブザベーションの値を比較したいのですが、何か良 い方法はありますか。

[回答]

次オブザベーションの値を参照する関数はありませんが、データセットを自己結合することで同様の作業が可能となります。

結合される側のデータセットを「A」、結合する側を「A'」とした時、FIRSTOBS=オプションに「2」を指定することで、A'の2オブザベーション目からデータを読み込むようにします。これにより、Aの1オブザベーション目とA'の1オブザベーション目(実際の値はAの2オブザベーション目に相当)が結合されることになります。

下記のプログラム例では、データセットoneを1オブザベーションずらして自己結合し、データセットtwoに比較の結果を出力しています。

※ データセットの結合(マージ)を行なっているため、データ量が多い場合は処理に時間がかかる可能性もありますのでご注意ください


   DATA one;
     INPUT x y;
   CARDS;
   5 1
   5 2
   8 1
   2 1
   2 2
   9 1
   ;
   RUN;

   DATA two;
     MERGE one one(FIRSTOBS=2 RENAME=(x=nextx) KEEP=x);
     IF x=nextx THEN match='YES';
     ELSE match='NO';
   RUN;

   PROC PRINT DATA=two;
   RUN;