Hi, Hope you can help. I have a dataset with a list of file names - I want to run a macro for each file seperately. I have done it like this: data _null_;
set PHFN038;
call execute('%PHFN038('||"file"||');');
run; Inside the macro I have to divide every file in to four subsets two headers, one body and one footer. The problem is that SAS unfortunately cant run this data null statement "inside" the execute data null statement... Does anybody have a solution? %macro PHFN038 (file);
filename PHFN038 "&FISpath./&file.";
data import;
infile PHFN038 truncover;
input Data $ 1-1768;
run;
data header1;
set import (firstobs=1 obs=1);
format data01 $9. date ddmmyyd10. data03 $6. data04 $1768.;
data01=substr(Data,1,9);
date=input(substr(Data,10,8),yymmdd8.);
data03=substr(Data,19,6);
data04=substr(Data,25);
run;
data header2;
set import (firstobs=2 obs=2);
format data01 $33. date ddmmyyd10. data03 $1768.;
data01=substr(Data,1,33);
date=input(substr(Data,34,8),yymmdd8.);
data03=substr(Data,42);
run;
%let _end=0;
data _null_;
set import;
nobs=_n_;
call symput('_end',nobs);
call symput('_end_b',nobs-1);
run;
%put &_end;
data body;
set import (firstobs=3 obs=&_end_b.);
format cod_tran $2. data02 $2. corp $2. key_num_acct $16. cod_rsn $2. data06 $30. date ddmmyyd10. data08 13. amount commax12.2 currency $3. data11 $108. data12 11. data13 $1768.;
cod_tran=substr(Data,1,2);
data02=substr(Data,3,2);
corp=substr(Data,5,2);
key_num_acct=substr(Data,7,16);
cod_rsn=substr(Data,29,2);
data06=substr(Data,31,30);
date=input(substr(Data,61,8),yymmdd8.);
data08=input(substr(Data,69,13),13.);
amount=input(substr(Data,82,12),12.)/100;
currency=substr(Data,94,3);
data11=substr(Data,97,108);
data12=input(substr(Data,205,11),11.);
data13=substr(Data,216);
run;
data footer;
set import (firstobs=&_end. obs=&_end.);
format data01 $3. count 6. data03 $34. amount commax12.2 data04 $1768.;
data01=substr(Data,1,3);
count=input(substr(Data,4,6),6.);
data03=substr(Data,10,34);
amount=input(substr(Data,44,12),12.)/100;
data04=substr(Data,56);
run; Can I change somthing with: (firstobs=3 obs=&_end_b.)? Can I find the last obs some way else? Or can I call the macro for each line without a data null statement??
... View more