これは非常に単純なことのように思えますが、sas データステップの「by ステートメント」が実際に何をしているのか説明できません。いつ使用する必要があるかはわかっていますが、何をしているのかわかりません。
以下の例では、first.var と last.var の仮想 sas 列がその値を持っている場合の意味を理解しています。by ステートメントは、var initial と metal の周りにこれらの仮想列を作成していますか? 次に、sas はデータセット全体を 1 回スキャンしていますか?
data jewelers ;
input id initial $ metal $ ;
datalines;
456 D Gold
456 D Silver
123 L Gold
123 L Copper
123 L PLatinum
567 R Gold
567 R Gold
567 R Gold
345 A Platinum
345 A Silver
345 A Silver
;
proc sort ;
by initial metal ;
run;
data dups;
set jewelers ;
by initial metal ;
if not (first.metal and last.metal) then output;
run;
print dups を実行すると、次のことが期待されます。
567 R Gold
567 R Gold
567 R Gold
345 A Silver
345 A Silver