57%macro mp_replace(infile,
64%let inref=%mf_getuniquefileref();
65%let outref=%mf_getuniquefileref();
66%
if &outfile=0 %then %let outfile=&infile;
67%let ds1=%mf_getuniquename(prefix=allchars);
68%let ds2=%mf_getuniquename(prefix=startmark);
71%let dttm=%sysfunc(datetime());
73filename &inref &infile lrecl=1 recfm=n;
77 input sourcechar $char1. @@;
78 format sourcechar hex2.;
83 length
string $ %length(%superq(&findvar));
84 string =symget(
"&findvar");
87 firstchar=char(
string,1);
88 findlen=lengthm(
string);
91 set &ds1 nobs=nobs point=_N_;
92 if sourcechar=firstchar then
do;
95 do point=_N_ to min(_N_ + findlen -1,nobs);
97 if sourcechar=char(
string, pos) then s + 1;
102 if s=findlen then
do;
115 declare hash HS(dataset:
"&ds2(keep=start)");
116 HS.defineKey(
"start");
118 declare hash HE(dataset:
"&ds2(keep=stop)");
119 HE.defineKey(
"stop");
122 set &ds1 end=eof curobs =n;
123 start = ^HS.check(key:n);
124 stop = ^HE.check(key:n);
126 strt =put(start,best. -L);
133 keep sourcechar strt;
136filename &outref &outfile recfm=n;
139 length replace $ %length(%superq(&replacevar));
140 replace=symget(
"&replacevar");
144 if strt =
"1" then put replace
char.;
145 else put sourcechar char1.;