Hi all! I am trying to teach myself how to merge large datasets using macros so I can save some time in the long run. I have been using this paper as a guide https://support.sas.com/resources/papers/proceedings/proceedings/sugi29/057-29.pdf . Using this code: filename indata pipe 'dir X:\SAVEFILE /b';
DATA file_list;
length fname $8;
infile indata truncover;
input fname $8.;
call symput ('num_files', put(_n_,2.));
RUN;
%MACRO fileread;
%do j=1 %to &num_files;
DATA _null_;
set file_list;
if _n_=&j;
call symput('filein',fname);
RUN;
data var_names;
length x1-x7 $8;
infile "X:\SAVEFILE\&filein" obs=1 missover DSD;
input (x1-x7) ($);
RUN;
%MACRO varnames;
%do i=1 to 7;
%global v&i;
DATA _null_;
set var_names;
call symput("v&i",trim(x&i));
RUN;
%end;
%mend varnames;
%varnames;
DATA temp;
infile "X:\SAVEFILE\&filein" firstobs=2 missover DSD;
input (&v1 &v2 &v3 &v4 &v5 &v6 &v7) ($);
cowID = &fname;
RUN;
%if &j=1 %then %do;
DATA data_all;
set temp;
RUN;
%end;
%end;
%mend fileread;
%fileread; I have been getting a log full of errors for each iteration of the 33 files I am trying to merge. A sample for one iteration is below. ERROR: Expected %TO not found in %DO statement.
ERROR: A dummy macro will be compiled.
NOTE: Line generated by the invoked macro "FILEREAD".
2 %global v&i; DATA _null_; set var_names; call
2 ! symput("v&i",trim(x&i)); RUN; %end; %mend varnames; %varnames; DATA
-
180
WARNING: Apparent invocation of macro VARNAMES not resolved.
ERROR 180-322: Statement is not valid or it is used out of proper order.
NOTE: Line generated by the invoked macro "FILEREAD".
3 (&v1 &v2 &v3 &v4 &v5 &v6 &v7) ($); cowID = &fname; RUN;
-
22
76
ERROR 22-322: Syntax error, expecting one of the following: a name, arrayname, _ALL_, _CHARACTER_,
_CHAR_, _NUMERIC_.
ERROR 76-322: Syntax error, statement will be ignored.
3 ! (&v1 &v2 &v3 &v4 &v5 &v6 &v7) ($); cowID = &fname; RUN;
-
22
WARNING: Apparent symbolic reference V1 not resolved.
WARNING: Apparent symbolic reference V2 not resolved.
WARNING: Apparent symbolic reference V3 not resolved.
WARNING: Apparent symbolic reference V4 not resolved.
WARNING: Apparent symbolic reference V5 not resolved.
WARNING: Apparent symbolic reference V6 not resolved.
WARNING: Apparent symbolic reference V7 not resolved.
WARNING: Apparent symbolic reference FNAME not resolved.
ERROR 22-322: Syntax error, expecting one of the following: a name, a quoted string,
a numeric constant, a datetime constant, a missing value, INPUT, PUT.
NOTE: The SAS System stopped processing this step because of errors.
WARNING: The data set WORK.TEMP may be incomplete. When this step was stopped there were 0
observations and 2 variables.
WARNING: Data set WORK.TEMP was not replaced because this step was stopped.
NOTE: DATA statement used (Total process time):
real time 0.01 seconds
cpu time 0.00 seconds
NOTE: There were 0 observations read from the data set WORK.TEMP.
NOTE: The data set WORK.DATA_ALL has 0 observations and 2 variables.
NOTE: DATA statement used (Total process time):
real time 0.01 seconds
cpu time 0.00 seconds
Can I have some help troubleshooting this code? I've been trying to go step by step through my log but from here I don't know where to go. Thanks!
... View more