KEY MONTH
=========== =======
11000001 01
21000002 02
31000001 02
31000002 02
31000003 02
41000001 02
41000002 03
51000001 04
61000001 04
________________________________________________________________________
data keys;
input kvar $2.;
cards;
21
31
31
61
;
run;
data test;
set keys;
infile ksds vsam key=kvar keypos=pos skip genkey;
input @ pos key $ month $;
do while (month eq '02');
select(_fdbk_);
when(0) do;
put 'record found: key =' kvar;
put _all_;
end;
when(4) stop; /* reached the end of file */
otherwise do;
put 'unexpected error:' kvar= _fdbk_= ;
_fdbk_ = 0 ; _error_ = 0 ;
stop;
end;
end;
output;
input @ pos key $ month $;
end;
run;
________________________________________________________________________
data test;
set keys;
infile ksds vsam key=kvar keypos=pos skip genkey;
input @ pos key $ month $;
/* This is where we check for the duplicate */
/* consecutive values of the generic key and force */
/* the access method back to direct if there is a */
/* duplicate by executing a read with a value that */
/* we know will not return a VSAM record. In this */
/* example the value is '99'. */
if lag(kvar)=kvar then do;
temp=kvar;
kvar='99';
input;
_error_=0;
_fdbk_=0;
kvar=temp;
input @ pos key $ month $;
end;
do while (month eq '02');
select(_fdbk_);
when(0) do;
put 'record found: key =' kvar;
put _all_;
end;
when(4) stop; /* reached the end of file */
otherwise do;
put 'unexpected error:' kvar= _fdbk_= ;
_fdbk_ = 0 ; _error_ = 0 ;
stop;
end;
end;
output;
input @ pos key $ month $;
end;
run;